Rails质量赋值定义和attr_accessible使用

时间:2011-03-11 19:01:57

标签: ruby-on-rails mass-assignment

只想明确什么是质量分配以及如何围绕它进行编码。是质量分配使用哈希分配许多字段,例如..

@user = User.new(params[:user])

为了防止这种情况,您可以使用 attr_accessible ,例如:

attr_accessible :name, :email

因此无法通过质量分配添加像:admin这样的字段吗?

但我们可以通过以下方式修改代码:

@user.admin = true

如果我们没有 attr_accessible ,那么一切都可以进行质量分配吗?

最后一个棘手的问题......即使只有一个 attr_accessible 就像“attr_accessible:name”一样意味着所有其他字段现在不是可以进行质量分配吗?

3 个答案:

答案 0 :(得分:12)

您的所有假设都是正确的。没有attr_accessible,所有字段都可以进行批量分配。如果您开始使用attr_accessible,则只有您指定的字段才能进行质量分配。

答案 1 :(得分:6)

正如Srdjan所指出的,你所有的假设都是正确的。你知道,还有一个attr_protected方法,与attr_accessible相反。

换句话说

attr_protected :admin

将阻止:管理员被批量分配但会允许所有其他字段。

答案 2 :(得分:3)

假设config.active_record.whitelist_attributes中的false设置为config/application.rb,则Srdjan的回答是正确的。

如果设置为true,则除非使用attr_accessibleattr_protected,否则所有属性都将默认不受质量指定