我有两个表registrations
和discounts
,分别保存有关注册和折扣的信息。每次注册都可以有一个折扣,每个折扣可以有很多注册。
当我执行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
关系,因为注册不属于折扣。
答案 0 :(得分:2)
如果折扣可以有很多注册,那么您想使用belongs_to而不是has_one
class Registration < ActiveRecord::Base
has_one :payment
belongs_to :discount
end
class Discount < ActiveRecord::Base
has_many :registrations
end
查看belongs_to和has_one
之间差异的explanation答案 1 :(得分: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
由于