5

假设您在您的用户控制器中,并且您想根据您可用的一些参数更改名称 @user。

我想知道以下之间是否有任何区别:

@user.name = params[:user][:name]

或者

@user.assign_attributes({:name=> params[:user][:name]})

提前致谢!

4

2 回答 2

8

找出此类问题的一个好方法是深入研究源代码。我在activerecord/lib/active_record/attribute_assignment.rbCheck it out here 中找到了方法。

assign_attributes方法实际上将遍历给定的参数并将:name=消息发送到您的模型。但是,因为您可能分配了许多属性,所以它考虑了批量分配的预防措施。(即确保属性列为attr_accessible)。

于 2012-08-07T22:11:37.593 回答
3

( =eg @user.name = params[:user][:name]) 直接调用属性设置器而不进行安全检查。assign_attributes检查传入值的安全性。

来自分配属性的 Rails API:

允许您通过使用 :as 选项传入具有与属性名称(再次与列名称匹配)和角色名称匹配的键的属性哈希来设置特定批量分配安全角色的所有属性。

assign_attributes 的来源

于 2012-08-07T22:11:57.397 回答