2011-08-02 24 views
1

Userモデルは、作成するCardSignupモデルから商品券を取得できます。2つの関連モデルが同じ結合名を共有できますか?

User.rb

has_many :conversions, :foreign_key => :converted_by, :class_name => "CardSignup" 
has_many :conversions, :foreign_key => :converted_by, :class_name => "GiftConversion" 

しかし、私はまた、私のモデルがように設定されているGiftConversion

と呼ばれる別々のモデルから無料商品券を配るしたいと思いますCardSignup.rb

belongs_to      :converted_by, :class_name => "User" 

は、このように

belongs_to      :converted_by, :class_name => "User" 

GiftConversion、私は何をしたいUser.find(x).conversionsを入力し、そのユーザーに関連付けられている彼らのFOREIGN_KEY :converted_by限り、CardSignupモデルとGiftConversionモデルの両方を返しますモデル。

残念ながら、これは正しく動作しません。代わりに、コンパイラは後のステートメントを取得するだけです。この場合はGiftConversionとなり、それがUser.find(x).conversionsと認識されるだけです。

誰もが同じ名前で両方のモデルを共有するUserモデルを持つ方法を知っていますか?

答えて

0

UNIONなどのカスタムSQL文を使用して両方のテーブルを接続するカスタムアソシエーションを使用している可能性がありますが、かなり類似しているが同一ではない2つのモデルがあるため、単一テーブル継承の優れた使用例です。

私はそれを行うような方法は、両方のCardSignupGiftConversionのために1つのテーブルを持っており、二つのモデルを接続するための単一テーブル継承を使用することですので、一般的な表には、それはだかどうかを指定type列が含まれるであろうCardSignupまたはGiftConversion

は、詳細については、「単一表の継承」の下にここを参照してください:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+0

私は本当にこのの頭や尾をすることはできません。しかし、それは素晴らしい考えのようです。 – Trip

+0

この記事ではうまく説明しています:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html –

+0

この2対1の3つの異なるモデルを結合する方法はまだ説明していません2つの多型の関連性。 – Trip

関連する問題