2012-08-07 8 views
5

あなたのユーザーコントローラにいて、使用可能ないくつかのパラメータに基づいて@userという名前を変更したいとします。Rails 3では、=とassign_attributesに違いはありますか?

私は、次のいずれかの間に差があるかどうかを知りたい:事前に

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

または

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

感謝を!

答えて

7

このような質問を理解するには、sourceに潜んでください。私はactiverecord/lib/active_record/attribute_assignment.rbCheck it out here.

assign_attributes方法は、実際のパラメータによってちょうどループが与えられます方法を発見し、あなたのモデルに:name=メッセージを送信します。ただし、多くの属性を割り当てる可能性があるため、大量割り当ての予防措置が考慮されます。 (つまり、属性がattr_accessibleと表示されていることを確認してください)。

3

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

RailsのAPIからassign_attributesについて:。

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

Source for assign_attributes