使用Rails 3.1:as =>:admin更新受attr_accessible保护的属性

Jas*_*rip 11 ruby-on-rails mass-assignment attr-accessible ruby-on-rails-3.1

在阅读了Rails 3.1 API中的attr_accessible后,我发现其中有一个as :admin选项.我想知道两件事.

  1. 如果用户有一个admin标志,我的控制器如何告诉我的模型用户是管理员.

  2. 如果用户是所有者,我可以:as => owner在我的模型中指定,并且我的控制器如何通知我的模型他们是项目的所有者.

Mic*_*ley 18

没有内置的模型集成; 你在assign_attributes电话中传递角色:

@project.assign_attributes(params[:project], :as => :admin)
Run Code Online (Sandbox Code Playgroud)

:as参数默认为:default,你可以在任何你想要的符号传递.要将它集成到您​​的User模型中,您可以为其指定一个属性role,然后执行以下操作:

@project.assign_attributes(params[:project], :as => current_user.role.to_sym)
Run Code Online (Sandbox Code Playgroud)

您还可以使用:without_protection以下方法绕过保护:

@project.assign_attributes(params[:project], :without_protection => true)
Run Code Online (Sandbox Code Playgroud)

以类似的方式,new,create,create!,update_attributes,和update_attributes!方法都尊重大众分配的安全性.关于安全性Ruby on Rails指南更多信息.