【问题标题】:Can someone explain strict mass assignment in Rails 3.2?有人可以解释 Rails 3.2 中的严格质量分配吗?
【发布时间】:2012-04-01 20:37:35
【问题描述】:

我刚刚开始使用 Rails 3.2,当我使用 create 或 update_attributes 时,我似乎总是遇到批量分配错误。这是正常的吗?我应该如何创建和更新记录?

【问题讨论】:

  • 你在使用嵌套资源吗?
  • 你的意思是我是否通过关联(即 blongs_to)分配属性,那么是的。否则,我不确定你的意思,抱歉。
  • Michael Hartl 在这个话题上写道:news.ycombinator.com/item?id=3781233

标签: ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

将要通过massassignment设置的属性添加到模型attr_accessible :my_attribute的白名单中

允许通过同一个表单设置相关的嵌套模型属性,您必须为此模型设置一个accepts_nested_attributes_for并将属性添加到白名单attr_accessible :$RELATED_MODEL_attributes

阅读这些链接。 http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

【讨论】:

  • 好的,我明白了。所以默认情况下,批量分配是受限的,这是正常行为吗?
  • 否,如果您不设置attr_accessibleattr_protected,所有属性都可以访问并且可以批量分配。所以默认是全部打开的...如果您在其中任何一个上设置,则创建一个白/黑名单,然后...如果您想分配嵌套属性。您必须将它们添加到白名单中,否则您会看到大量分配错误。所以在这种情况下你不得不设置attr_accessible...
  • 似乎上面引用的 Michael Hartle 帖子与您有点矛盾,因为默认情况下,至少在 3.2.3 中,除非您使用 attr_accessible 列入白名单,否则批量分配受到限制。
  • 3.2.0以前是这样的。您使用的是哪个版本?但无论版本如何,使用白名单始终是一种好习惯。
  • Rails 3.2.3 的重点之一是更改了新应用默认需要attr_accessible(根据release notes)。这不会影响现有的应用程序,它只是强化了必须仔细配置批量分配以确保安全的观点。
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 2012-05-29
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多