2012-03-29 9 views
2

2つのモデルがあり、それぞれが別のモデルに属しているとします。通常は、フィールドにデータを設定するときに、関連付けにオブジェクトを割り当てます。レールはsetメソッドをオーバーライドできるので、関連付けの割り当てをカスタマイズできますか?文字列を使用したレールアソシエーションの割り当て

例えば

class Person 
    # something about shirts 
end 

class Shirt 
    belongs_to :person 

    def person=(p) 
    self.person = Person.find_or_create_by_name(p) 
    end 
end 

そして、その自動関連付けを結合するが、検索を行うには、文字列を使用して自動的に結合のようなものを使用します。これは可能ですか?

S = Shirt.new

s.person = "テストパーソン"

おかげ

答えて

3

RORガイドがassociation extensionあなたが必要とするカバー。

更新: 実際に、あなたがやっていることを理解すれば、実際には、セッターを無効にすることはそれほど悪くありません。しかし、無限ループを引き起こす可能性があるので(あなたの例のように)注意する必要があります。したがって、Rails 3.2を使用している場合はuse super、それ以外の場合はalias_method_chainを使用する必要があります。

+0

ありがとうございました、リンクを逃している必要があります。このリンクには、新しいメソッドを追加する方法も記載されています。 Rails関連のセッターをオーバーライドするのは悪い習慣と考えられますか?これはもともと私がやろうとしていたものなので – pieterk

+0

@Onyth私は説明を追加しました。その説明には –

+0

ありがとうございます。これは、AR関連の方法との私の小さな誤解を最も明確にクリアします。 – pieterk

関連する問題