【问题标题】:mass-assignment error with whitelist_attributes set to falsewhitelist_attributes 设置为 false 的质量分配错误
【发布时间】:2012-08-14 19:01:29
【问题描述】:

我目前正在将应用程序从 Rails 2.3.8 升级到 Rails 3.2.7,并且在批量赋值方面遇到了一些问题。
当我尝试保存任何模型时,我收到以下错误:

Can't mass-assign protected attributes: a,b,c,d

我注意到 Rails 已将白名单属性的默认设置设置为:

config.active_record.whitelist_attributes = false

所以我将其更改为 true,但错误不断出现。我们将 attr_protected 用于一些事情,但它似乎忽略了这些并保护了一切。我猜这是由于模型使用了“accepts_nested_attributes_for”,但这些都是必要的。

有没有其他方法可以在不使用 'attr_accessible' 的情况下解决这个问题?

【问题讨论】:

  • attr_accessible 可以实现模型属性的大规模分配。你有什么理由不想使用它吗?
  • 这是一个相当大的应用程序,因此更新所有内容需要一段时间,而且该网站仅供公司内部使用,因此安全性并不是什么大问题。

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


【解决方案1】:

只要您使用 attr_accessible 或 attr_protected,您就为该模型启用了批量分配保护。如果您在 cmets 中提到该网站纯粹供内部使用,那么在不使用 attr_accessible 的情况下解决此问题的唯一方法是从模型中删除 attr_protected 或使用 accept_nested_attributes_for 触及的任何模型。

【讨论】:

  • 去掉attr_protected似乎没有任何效果,只要accepts_nested_attributes_for在,这是必须的。
  • 您接受嵌套属性以使用 attr_protected 的模型吗?注意:从长远来看,不管怎样,你最好还是使用 attr_accessible
  • 不,它没有,虽然我想你是对的,但无论如何我迟早要使用 attr_accessible 来获取所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多