我有一个关于在Rails中使用attr_accessible的问题。
有时我想将guard_protected_attributes设置为false,以便绕过批量赋值保护。我想知道为什么下面这行代码不能工作(它创建了"can't stringify key“错误):
@user.attributes=({ :name => "James Bond", :admin => true }, false)...but这样做:
@user.send(:attributes=, { :name => "James Bond", :admin => true }, false)有人知道原因吗?
发布于 2009-06-04 17:04:34
因为Ruby解析器将'{ :name => "James Bond", :admin => true}, false‘解析为#attributes=的单个参数。调用方法'foo=‘会限制你在Ruby语言中只能使用一个参数。send可以绕过这一点。
实际发生的情况是,Rails试图将false的键串化,因为它是FalseClass而不是Hash,没有任何键。
发布于 2009-08-31 08:12:06
我想看看你们是否会跟进这个问题,所以我必须使用.send,或者是否有更好的方法?
发布于 2011-01-08 02:36:25
最后,我定义了一些帮助器方法,使绕过大量赋值限制变得更容易。
module ActiveRecord
class Base
# Assigns attributes while ignoring mass assignment protection
def force_feed(attributes)
self.send(:attributes=, attributes, false)
self
end
end
endhttps://stackoverflow.com/questions/951820
复制相似问题