5

ユーザーコントローラーを使用していて、利用可能ないくつかのパラメーターに基づいて @user の名前を変更したいとしましょう。

以下の違いがあるか知りたいです。

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

また

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

前もって感謝します!

4

2 に答える 2

8

このような質問を理解するための優れた方法は、ソースに飛び込むことです。私はここでそれをチェックしてくださいで方法を見つけました。activerecord/lib/active_record/attribute_assignment.rb

このassign_attributesメソッドは、実際には指定されたパラメーターをループして:name=、モデルにメッセージを送信します。ただし、多くの属性を割り当てる可能性があるため、一括割り当ての予防措置が考慮されます。(つまり、属性がとしてリストされていることを確認してくださいattr_accessible)。

于 2012-08-07T22:11:37.593 に答える
3

=eg @user.name = params[:user][:name])は、セキュリティチェックなしで属性セッターを直接呼び出します。渡された値のassign_attributesセキュリティをチェックします。

Assign_attributesのRailsAPIから:

:asオプションを使用して、属性名(これも列名と一致します)とロール名に一致するキーを持つ属性のハッシュを渡すことにより、特定の一括割り当てセキュリティロールのすべての属性を設定できます。

Assign_attributesのソース

于 2012-08-07T22:11:57.397 に答える