2012-08-14 58 views
2

我目前正在将应用程序从Rails 2.3.8升级到Rails 3.2.7,并且在批量分配时遇到了一些麻烦。
当我尝试和保存任何模型,我得到以下错误:mass-assignment error with whitelist_attributes设置为false

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

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

config.active_record.whitelist_attributes = false 

所以我改成了真实,但错误不断出现。我们使用attr_protected做了一些事情,但似乎忽略了这些并保护了所有内容。我猜这是因为使用'accep_nested_attributes_for'的模型,但这些都是必要的。

有没有其他方法可以解决这个问题,而不使用'attr_accessible'?

+0

'attr_accessible'是为模型启用质量分配的属性。你有什么理由避免使用它? – 2012-08-14 19:03:19

+0

这是一个非常大的应用程序,因此将所有内容都更新到最新状态需要一段时间,而且该网站纯粹用于公司内部使用,所以安全性并不是什么大问题。 – Aaronneyer 2012-08-14 19:25:39

回答

1

只要您使用attr_accessible或attr_protected,就已启用该模型的质量分配保护。如果网站纯粹是为了在您的评论中提及的内部使用,则不使用attr_accessible即可解决此问题的唯一方法是从模型或使用accept_nested_attributes_for触摸的任何模型中删除attr_protected。

+0

删除attr_protected似乎没有任何效果,只要accept_nested_attributes_for在那里,这是必要的。 – Aaronneyer 2012-08-15 15:16:38

+0

您正在接受使用attr_protected的嵌套属性的模型吗?注意:从长远来看,使用attr_accessible可能会更好,不管 – sgrif 2012-08-15 15:30:18

+0

不是,虽然我认为你是对的,但是迟早我会不得不使用attr_accessible。 – Aaronneyer 2012-08-16 15:20:15