2

免责声明:我使用的是 Rails 3.2。具体来说,在 Rails 3 in Action 一书中:

用户模型确实有 attr_accessible attr_accessible :email, :password, password_confirmation, :remember_me

User 模型没有 :admin 列出,因此它不能作为 params[:user] 的一部分批量分配。


app/views/admin/users/_form.html.erb 中的 form_for 块设置了一个复选框元素以允许管理员将用户设置为管理员:

` <%= f.check_box :admin %> <%= f.label :admin, "是管理员吗?" %>


app/controllers/admin/users_controller.rb

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

@user.admin = params[:user][:admin] == "1" 行应该将 admin 属性设置为 true,但会生成大量分配错误,这会阻止我将 @user.admin 属性更改为 true。


我可以将 admin 属性设置为 true 而无需通过控制台进行批量分配,同时在 User 模型中定义一个方法:

def make_admin
  self.admin = true
end

这完成了同样的事情,没什么特别的。

如何获取分配给 TRUE 的管理属性,以便用户通过复选框使用视图和控制器工作?

有没有办法从 params[:user][:admin]) 中删除或分离 admin 参数?

4

2 回答 2

2

注释掉config.active_record.mass_assignment_sanitizer = :strictdevelopment.rb 文件中的行让我前进。

于 2012-03-16T20:32:02.227 回答
1

评论批量分配保护是一个坏主意。

如果要批量分配,为什么不添加:admin到列表中?attr_accessible

有关信息,当您键入以下内容时:

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

不是@user.admin = ...抛出质量分配错误,而是行User.new(params[:user])

无论如何,如果您想检索复选框的值,但又不想批量分配它,请尝试以下操作:

admin = params[:user].delete(:admin)
@user = User.new(params[:user])
@user.admin = admin == "1"  
if @user.save

不要忘记重新启用批量分配保护;)

于 2013-01-13T21:05:27.670 回答