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

5

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

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

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

或者

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

提前感谢您!

2个回答

8
一个很好的解决这类问题的方法是深入了解源代码。我在activerecord/lib/active_record/attribute_assignment.rb这里可以查看找到了这个方法。 assign_attributes方法会遍历给定的参数,并向模型发送:name=消息。然而,由于您可能会分配许多属性,因此它考虑了批量分配的预防措施(即确保将属性列为attr_accessible)。

3
= (例如@user.name = params[:user][:name]) 直接调用属性设置器,没有进行安全检查。而assign_attributes会对传入的值进行安全性检查。
从Rails API中可以看到,assign_attributes允许你通过传递一个属性哈希表来设置特定的批量赋值安全角色,其中键匹配属性名称(与列名再次匹配),并且可以使用:as选项指定角色名称。
请参阅assign_attributes源码

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接