7

設定する別のメソッドに依存する仮想セッター メソッドを定義する場合、ハッシュに設定される属性の順序が重要になるようです。属性を一括割り当てしている間にこれを回避する方法はありますか?

https://gist.github.com/3629539

編集

この例には示されていない実際のコードの条件は、関連付けられたオブジェクトの存在をチェックしています。オブジェクトが存在する場合、値を設定します。そうでない場合は、渡された値を無視します。ただし、accepts_nested_attributes_for も使用しています。したがって、属性ハッシュには関連付けの属性が含まれる場合があります。その場合、オブジェクトは存在します。

{:name => 'Fred', :nested_attributes => {:color => 'red'}}

モデルが存在しないため、名前は設定されません。

{:nested_attributes => {:color => 'red'}, :name => 'Fred'}

accept_nested_attributes_for はネストされたインスタンスを構築し、属性を設定します。名前を設定する場合、インスタンスが存在し、ネストされた属性が設定されます。

4

2 に答える 2

0

私が今考えることができる唯一の解決策は、属性セッターをオーバーライドすることです...

def attributes=(attrs)
    self[:dont_set_name] = attrs.delete(:dont_set_name)
    super
end
于 2012-09-05T03:03:26.527 に答える