我正在创建一个Rails应用程序,它是一个博客平台,有许多贡献作家。 我的用户模型有一个 :writer 布尔属性,用于指示特定用户是否有权发布文章。 为了防止批量分配,用户模型的attr_accessible 下未列出 :writer 属性。 相反,我想创建一个类似于以下内容的函数,以允许切换编写器权限:
def toggle_writer
if User.find(:id).writer?
User.find(:id).update_attribute(:writer, false)
else
User.find(:id).update_attribute(:writer, true)
end
flash[:success] = "User permissions toggled."
redirect_to admintools_users_path
end
不过,我对这种方法有几个问题:
- 我将如何从视图中调用它? 有没有办法通过link_to或button_for调用函数?
- 我会把这样的函数放在哪里? 在控制器还是助手中?
- 我需要编辑 config/routes.rb 文件中的任何路由吗?
提前感谢您的帮助!
- 是的,你可以。
- 如果你把它放在
users_controller
里更好. -
是的,你会的。由于此操作将更新单个用户,因此,您应该在
routes.rb
执行以下操作:resources :users do member do #this means you are doing with a certain object get :toggle_writer, :as => :toggle_writer_for # this line will generate toggle_writer_for_user_path route end end
现在你可以把这条路线与link_to
一起使用,比如link_to("Toggle writer", toggle_writer_for_user_path(@user))
,你可以从params[:id]
得到@user
。