假设你在用户控制器中,并且你想根据你可用的一些参数来改变@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选项与键匹配 属性名称(与列名称匹配)和 角色名称。