我设计了一个包含2个模型的简单Rails应用:Link
和Category
。每个链接只有一个类别,一个类别可以有0个或多个链接。我应该对Link
和Category
应用哪种关联?我对Ruby很新,那些关联术语让我很困惑。
答案 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_one
和belongs_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