假設你在用戶控制器中,並且你想根據你可用的一些參數來改變@user的名字。在Rails 3中,=和assign_attributes之間有區別嗎?
我想知道是否有下列任何區別:提前
@user.name = params[:user][:name]
或
@user.assign_attributes({:name=> params[:user][:name]})
謝謝!
假設你在用戶控制器中,並且你想根據你可用的一些參數來改變@user的名字。在Rails 3中,=和assign_attributes之間有區別嗎?
我想知道是否有下列任何區別:提前
@user.name = params[:user][:name]
或
@user.assign_attributes({:name=> params[:user][:name]})
謝謝!
找出這樣的問題的好方法是深入探索source。我發現方法在activerecord/lib/active_record/attribute_assignment.rb
Check it out here.
assign_attributes
方法實際上只是循環給定的參數併發送:name=
消息到您的模型。但是,由於您可能會分配許多屬性,因此需要考慮質量分配的預防措施。 (即確保該屬性列爲attr_accessible
)。
=
(例如@user.name = params[:user][:name]
)直接調用沒有安全檢查的屬性設置器。該assign_attributes
檢查安全傳遞的價值觀
從Rails的API爲assign_attributes:
允許您通過傳遞屬性的哈希值來設置一個特定的質量分配 安全角色的所有屬性使用:as選項與鍵匹配 屬性名稱(與列名稱匹配)和 角色名稱。