如何设置关联的has_many以查找db表中的2列(category_a_id和category_b_id)

时间:2016-09-02 04:15:25

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord rails-models

我需要能够将categories相互链接。

我有一个category_links表,其中包含2列category_a_idcategory_b_id,用于保存已链接的2个类别中的id

我希望能够拨打Category.find(1).category_links,它会从category_a_idcategory_b_id列中获取ID为1的所有记录。此外,如果类别被销毁,它将删除category_link数据库中的任何关联记录(如果其在category_a_idcategory_b_id列中关联。

目前位于category_links模型中

belongs_to :category_b, :class_name => :Category
belongs_to :category_a, :class_name => :Category

和类别db

has_many(:category_links, :foreign_key => :category_a_id, :dependent => :destroy)
has_many(:category_links, :foreign_key => :category_b_id, :dependent => :destroy)

但是这只会从category_b_id列中找出匹配ID不是两者的记录。因此,调用Category.find(1).category_links并不会从category_a_idcategory_b_id中获取匹配的记录。破坏类别同样如此。

如何让它工作,所以如果我销毁一个类别,它会查看相关类别的两列,并且调用Category.find(1).category_links也会在两列中查找匹配的记录?

1 个答案:

答案 0 :(得分:2)

通过has_many没有简单的方法可以实现这一目标,但是如果你不想在Category上创建一个自定义方法,那就不可能了:

def category_links
  @category_links ||= CategoryLinks.where('category_a_id = ? or category_b_id = ?', id, id)
end