假设您在用户控制器中,并且您希望根据您可以使用的某些参数更改@user名称。
我想知道以下内容之间是否有任何区别:
@user.name = params[:user][:name]
或
@user.assign_attributes({:name=> params[:user][:name]})
提前致谢!
答案 0 :(得分:7)
找出这样的问题的好方法是深入研究source。我在activerecord/lib/active_record/attribute_assignment.rb
Check it out here.
assign_attributes
方法实际上只是遍历给定的参数,并将:name=
消息发送给您的模型。但是,因为您可能分配了许多属性,所以它会考虑质量分配预防措施。 (即确保该属性列为attr_accessible
)。
答案 1 :(得分:3)
=
(例如@user.name = params[:user][:name]
)直接调用属性setter而不进行安全检查。 assign_attributes
检查传入的值的安全性。
来自assign_attributes的Rails API:
允许您设置特定质量分配的所有属性 通过传入具有键匹配的属性的哈希来实现安全角色 属性名称(再次匹配列名)和 使用:as选项的角色名称。