在Rails 3中,=和assign_attributes之间有区别吗?

时间:2012-08-07 21:47:41

标签: ruby-on-rails-3

假设您在用户控制器中,并且您希望根据您可以使用的某些参数更改@user名称。

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

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

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

提前致谢!

2 个答案:

答案 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选项的角色名称。

Source for assign_attributes