Rails - attr_accessible和质量分配

3 ruby ruby-on-rails mass-assignment

我有一个关于attr_accessible在Rails中使用的问题.

我有时想设置guard_protected_attributesfalse以绕过质量分配的保护.我想知道为什么以下行不起作用(它创建"无法字符串化键"错误):

@user.attributes=({ :name => "James Bond", :admin => true }, false)
Run Code Online (Sandbox Code Playgroud)

......但是这样做:

@user.send(:attributes=, { :name => "James Bond", :admin => true }, false)
Run Code Online (Sandbox Code Playgroud)

谁知道原因?

Jam*_*sen 6

因为Ruby解析器将' { :name => "James Bond", :admin => true}, false'作为单个参数解析#attributes=.调用方法' foo='限制你在Ruby中的一个参数.在send周围得到.

实际上发生的事情是Rails正在尝试对false其中的键进行字符串化,FalseClass而不是a Hash,它们没有任何键.