Rails 批量赋值定义和 attr_accessible 使用

Posted

技术标签:

【中文标题】Rails 批量赋值定义和 attr_accessible 使用【英文标题】:Rails mass assignment definition and attr_accessible use 【发布时间】:2011-07-13 17:28:02 【问题描述】:

只是想弄清楚什么是质量分配以及如何围绕它进行编码。 ma​​ss 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_accessibleattr_protected

【讨论】:

以上是关于Rails 批量赋值定义和 attr_accessible 使用的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3.2,批量分配,动态角色?

Rails - attr_accessible & mass assignment

Rails 关联不能批量分配外键

在模型 Rails 3.2.2 中没有设置 attr_accessible 的质量分配

Rails 3.1 attr_accessible 验证接收角色数组

用于 attr_accessible/protected 的 Rails 3 配置设置