Rails 批量赋值定义和 attr_accessible 使用
Posted
技术标签:
【中文标题】Rails 批量赋值定义和 attr_accessible 使用【英文标题】:Rails mass assignment definition and attr_accessible use 【发布时间】:2011-07-13 17:28:02 【问题描述】:只是想弄清楚什么是质量分配以及如何围绕它进行编码。 mass assignment是不是很多字段的赋值使用了一个hash,即like..
@user = User.new(params[:user])
为了防止这种情况发生,您可以使用 attr_accessible,例如:
attr_accessible :name, :email
所以不能通过批量分配添加像 :admin 这样的字段?
但是我们可以在代码中修改它:
@user.admin = true
那么,如果我们没有 attr_accessible 那么所有东西都可以用于批量分配,这是真的吗?
最后,棘手的一点......是不是真的,即使有一个 attr_accessible 像 "attr_accessible :name" 意味着 所有 其他字段现在 不是 可以批量分配吗?
【问题讨论】:
【参考方案1】:你所有的假设都是正确的。如果没有 attr_accessible,所有字段都可以批量分配。如果您开始使用 attr_accessible,则只有您指定的字段才可批量分配。
【讨论】:
【参考方案2】:正如 Srdjan 所指出的,您的所有假设都是正确的。如您所知,还有一个与 attr_accessible 相反的 attr_protected 方法。
换句话说
attr_protected :admin
将阻止 :admin 被批量分配,但将允许所有其他字段。
【讨论】:
【参考方案3】:假设您的config/application.rb
中的config.active_record.whitelist_attributes
设置为false
,Srdjan 的回答是正确的。
如果设置为true
,则所有属性将默认防止批量分配,除非使用attr_accessible
或attr_protected
。
【讨论】:
以上是关于Rails 批量赋值定义和 attr_accessible 使用的主要内容,如果未能解决你的问题,请参考以下文章
Rails - attr_accessible & mass assignment
在模型 Rails 3.2.2 中没有设置 attr_accessible 的质量分配