如果一个链接有一个'或者' belongs_to'一个类别?

时间:2018-04-12 07:44:43

标签: ruby-on-rails ruby associations one-to-many

我设计了一个包含2个模型的简单Rails应用:LinkCategory。每个链接只有一个类别,一个类别可以有0个或多个链接。我应该对LinkCategory应用哪种关联?我对Ruby很新,那些关联术语让我很困惑。

3 个答案:

答案 0 :(得分:3)

你说each link has exactly one category

class Link < ApplicationRecord
  belongs_to :category
end

类别应该在链接之前存在,因此我们选择belongs_to,而不是has_one

你说a category can have 0 or multiple links,所以0,1,2或79。

class Category < ApplicationRecord
  has_many :links
end

答案 1 :(得分:2)

我建议先阅读active record associations

在你的情况下

class Link
  belongs_to :category
end

class Category
  has_many :links
end

答案 2 :(得分:1)

当它到达has_onebelongs_to时,不要对语义感到困惑。

关键区别在于belongs_to将外键放在模型表中:

class Link < ApplicationRecord
  belongs_to :category
end

class Category < ApplicationRecord
  has_many :links
end

您应该将belongs_to :category视为&#34;此模型表有一个category_id列,它引用类别,它只能属于一个类别&#34;。

如果您改为使用:

class Link < ApplicationRecord
  has_one :category
end

Rails会尝试通过categories.link_id列来解决关联问题,该列根本不会起作用。如果您在没有外键的情况下具有一对一关联,则应使用has_one

class Country
  has_one :capitol
end

class Capitol
  belongs_to :country
end