ユーザーコントローラーを使用していて、利用可能ないくつかのパラメーターに基づいて @user の名前を変更したいとしましょう。
以下の違いがあるか知りたいです。
@user.name = params[:user][:name]
また
@user.assign_attributes({:name=> params[:user][:name]})
前もって感謝します!
ユーザーコントローラーを使用していて、利用可能ないくつかのパラメーターに基づいて @user の名前を変更したいとしましょう。
以下の違いがあるか知りたいです。
@user.name = params[:user][:name]
また
@user.assign_attributes({:name=> params[:user][:name]})
前もって感謝します!
このような質問を理解するための優れた方法は、ソースに飛び込むことです。私はここでそれをチェックしてくださいで方法を見つけました。activerecord/lib/active_record/attribute_assignment.rb
このassign_attributes
メソッドは、実際には指定されたパラメーターをループして:name=
、モデルにメッセージを送信します。ただし、多くの属性を割り当てる可能性があるため、一括割り当ての予防措置が考慮されます。(つまり、属性がとしてリストされていることを確認してくださいattr_accessible
)。
(=
eg @user.name = params[:user][:name]
)は、セキュリティチェックなしで属性セッターを直接呼び出します。渡された値のassign_attributes
セキュリティをチェックします。
Assign_attributesのRailsAPIから:
:asオプションを使用して、属性名(これも列名と一致します)とロール名に一致するキーを持つ属性のハッシュを渡すことにより、特定の一括割り当てセキュリティロールのすべての属性を設定できます。