【问题标题】:Recursive many to many relationship on RailsRails 上的递归多对多关系
【发布时间】:2015-03-02 23:49:19
【问题描述】:

对于我的项目,我有一些链接到类别的帖子。我想要实现的,是拥有与他人相对的类别。像这样:

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 吗?

【问题讨论】:

  • 您是否在类别之间使用另一个表?
  • 我使用连接表 'category_relative'(我编辑我的答案)
  • 你的问题已经解决了吗?

标签: mysql ruby-on-rails ruby


【解决方案1】:

你可以试试这样的

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

使用此代码,您可以在同一个类和另一个类之间建立多对多关系

【讨论】:

  • 我在自己的项目中有类似的模型,它应该可以工作
  • 我是否必须创建其他模型(CategoryRelative)?
  • 是的,属于,我添加了一个我进行编辑,所有 has_many 必须是复数形式
  • 看起来它不起作用。我可以从我的第一类中检索亲属,但不能从我的第二类中检索。 c1.category_relatives检索亲属,但c2.category_relatives为空。
  • c1.category_relatives 是一个关系,逆关系是 c2.inverse_category_relatives
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 2019-09-12
  • 2020-11-01
  • 2021-09-19
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多