0

登録と割引に関する情報をそれぞれ保持する2 つのテーブルがregistrationsあります。discounts各登録には 1 つの割引を含めることができ、各割引には複数の登録を含めることができます。

のようなことをすると、割引のためにすべての登録を引き出すことができますがDiscount.find(1).registrations、電話をかけようとするとRegistration.find(1).discountエラーが発生します

Unknown column 'discounts.registration_id' in 'where clause': SELECT  `discounts`.* FROM `discounts`  WHERE `discounts`.`registration_id` = 1  ORDER BY `discounts`.`id` ASC LIMIT 1`

私のモデルは現在、次のように設定されています。

class Registration < ActiveRecord::Base
        has_one :payment
        has_one :discount
end

class Discount < ActiveRecord::Base
        has_many :registrations
end

さらに、私のregistrationテーブルには外部キーがありますdiscount_id

belongs_toモデルに関係を設定すれば、関連付けを機能させることができますregistrationsが、登録は割引に属していません。割引がある場合とない場合があります。

この関係をどのように設定すればよいですか?別のテーブルを設定してhas_many, throughリレーションシップを使用する必要がありますか?

編集:登録は割引に属していないため、モデルでbelongs_to関係を使用したくありません。registration

4

2 に答える 2

0

次のように関係を定義する必要があります。

class Registration < ActiveRecord::Base
  has_one :payment
  has_one :discountable
  has_one :discount, through: :discountable
end

class Discount < ActiveRecord::Base
  has_many :registration, through: :discountables
end

class Discountable < ActiveRecord::Base
  belongs_to :registration
  belongs_to :discount
end 

ありがとう

于 2013-11-07T09:59:13.463 に答える