0

我有两个表,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,因为注册不属于折扣。

4

2 回答 2

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 之间区别的解释

于 2013-11-07T10:07:08.367 回答
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 回答