轨道上的红宝石 - 切换非attr_accessible变量



我正在创建一个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

不过,我对这种方法有几个问题:

  1. 我将如何从视图中调用它? 有没有办法通过link_tobutton_for调用函数?
  2. 我会把这样的函数放在哪里? 在控制器还是助手中?
  3. 我需要编辑 config/routes.rb 文件中的任何路由吗?

提前感谢您的帮助!

  1. 是的,你可以。
  2. 如果你把它放在users_controller里更好.
  3. 是的,你会的。由于此操作将更新单个用户,因此,您应该在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

相关内容

  • 没有找到相关文章

最新更新