对于我的项目,我有一些帖子链接到类别。我想要实现的目标是拥有与他人相关的类别。像这样:
c1 = Category.create(name: 'Television')
c2 = Category.create(name: 'TV')
c1.relatives << c1
我使用连接表:
create_table :category_relative, id: false do |t|
t.belongs_to :category_1
t.belongs_to :category_2
end
add_index :category_relative, [:category_1_id, :category_2_id]
到目前为止,我已经尝试过这个:
class Category < ActiveRecord::Base
has_and_belongs_to_many :relatives, class_name: 'Category',
join_table: 'category_relative', foreign_key: 'category_1_id',
association_foreign_key: 'category_2_id'
end
这是有效的,但只有一个方面:
c1.relatives
=> []
c2.relatives
=> [#<Category:0x007fcc610b8418 id: 1, name: 'Television']
我知道我可以为每个条目添加一个亲戚,但这对我的数据库来说太重了:
c1.relatives << c2
c2.relatives << c1
你知道吗?我应该手动编写JOIN吗?
答案 0 :(得分:0)
您可以尝试这样的事情
class Category < ActiveRecord::Base
has_many :category_relatives, dependent: :destroy
has_many :relatives, :through => :category_relative
has_many :inverse_category_relatives, :class_name => "categoryRelative", :foreign_key => "category_2_id", dependent: :destroy
has_many :inverse_relatives, :through => :inverse_category_relative, :source => :category
end
通过课程:
class CategoryRelative < ActiveRecord::Base
belongs_to :category
belongs_to :relative, :class_name => "Category"
end
使用此代码,您可以在同一个类之间建立多对多的关系