2010-06-11 57 views
0

由於您無法使用ActiveRecord的常規'update'和'update_attribute'方法來更新受保護的屬性,因此以下是更新單個用戶屬性的最佳方法嗎?在遷移中使用update_all更新受保護的屬性

User.update_all("admin = true","id = 1") 

我猜這不是在'最佳實踐'類別,所以我只是好奇,如果有一個更合適的方式。

回答

2

,最好的辦法是隻設置直接,然後保存模型:

user = User.find(1) 
user.admin = true 
user.save 

保護屬性的整點,因此您不必時時擔心做這樣的事情時,過濾出來@user.update_attributes(params[:user])否則可能會將非管理員變成管理員或其他內容。使用update_all會阻止驗證運行,這幾乎肯定不是您想要的。

編輯:它看起來像這是一個遷移,所以我只會使用update_all或其他任何東西,而不是太擔心它。遷移在每個環境中運行一次,然後再也不會這樣,所以不要過多地冒汗。

+0

這是我最初試過的,但似乎並沒有在我的遷移工作,而update_all確實有效... – JackCA 2010-06-11 01:20:27

+0

哦,這是一個遷移?你應該這樣說:p 是的,只需使用update_all,不用擔心。 – x1a4 2010-06-11 01:21:46

+0

我不認爲這會有所作爲...我的壞。爲什麼它不能在遷移中工作? – JackCA 2010-06-11 01:24:12