Rails质量分配定义和attr_accessible使用

只是想明确什么是质量分配以及如何围绕它进行编码。 质量赋值是使用散列分配许多字段,即类似..

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

为了防止这种情况,你可以使用attr_accessible

 attr_accessible :name, :email 

因此,像管理员这样的字段无法通过批量分配添加?

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

 @user.admin = true 

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

最后一个棘手的问题……是否真的即使有一个attr_accessible如“attr_accessible:name”也意味着所有其他字段现在都无法进行质量分配?

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

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

换一种说法

 attr_protected :admin 

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

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

如果设置为true ,则默认情况下保护所有属性免受质量分配,除非使用attr_accessibleattr_protected