切换非attr_accessible变量

时间:2011-05-17 06:51:14

标签: ruby-on-rails toggle attr-accessible

我正在创建一个Rails应用程序,它是一个博客平台,有许多贡献作者。我的用户模型具有:writer 布尔属性,用于指示特定用户是否有权发布文章。为了防止批量分配,用户模型的 attr_accessible 下的:writer 属性为 NOT 。相反,我想创建一个类似于以下的函数,以允许切换writer-permissions:

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

我对这种方法有几个疑问:

  1. 我如何从视图中调用它?有没有办法通过 link_to button_for 调用功能?
  2. 我会把这样的功能放在哪里?在控制器或助手?
  3. 我是否需要编辑 config / routes.rb 文件中的所有路由?
  4. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

  1. 是的,你可以。
  2. 如果将其放入users_controller
  3. ,则会更好
  4. 是的,你会的。由于此操作将更新单个用户,因此,您应该在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
    
  5. 现在,您可以将此路线与link_to一起使用,例如link_to("Toggle writer", toggle_writer_for_user_path(@user)),您可以从@user获取params[:id]