17

只是想清楚什么是质量分配以及如何围绕它进行编码。批量分配是使用散列分配许多字段,即像..

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

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

attr_accessible :name, :email

所以不能通过批量分配添加像 :admin 这样的字段?

但是我们可以在代码中修改它,例如:

@user.admin = true

那么,如果我们没有attr_accessible那么所有东西都可以用于批量分配,这是真的吗?

最后是棘手的一点......即使有一个像“ attr_accessible:name”这样的attr_accessible,是否意味着现在无法访问所有其他字段以进行批量分配?

4

3 回答 3

12

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

于 2011-03-11T19:06:58.923 回答
6

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

换句话说

attr_protected :admin

将防止 :admin 被批量分配,但将允许所有其他字段。

于 2011-03-11T22:43:32.383 回答
3

Srdjan 的答案是正确的,假设config.active_record.whitelist_attributesfalse您的config/application.rb.

如果设置为true,默认情况下将保护所有属性不被批量分配,除非使用attr_accessibleattr_protected

于 2013-03-02T19:48:27.880 回答