我需要能够将categories
相互链接。
我有一个category_links
表,其中包含2列category_a_id
和category_b_id
,用于保存已链接的2个类别中的id
。
我希望能够拨打Category.find(1).category_links
,它会从category_a_id
和category_b_id
列中获取ID为1的所有记录。此外,如果类别被销毁,它将删除category_link
数据库中的任何关联记录(如果其在category_a_id
或category_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_id
和category_b_id
中获取匹配的记录。破坏类别同样如此。
如何让它工作,所以如果我销毁一个类别,它会查看相关类别的两列,并且调用Category.find(1).category_links
也会在两列中查找匹配的记录?
答案 0 :(得分:2)
通过has_many
没有简单的方法可以实现这一目标,但是如果你不想在Category
上创建一个自定义方法,那就不可能了:
def category_links
@category_links ||= CategoryLinks.where('category_a_id = ? or category_b_id = ?', id, id)
end