2012-08-14 37 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