如何设置关联的 has_many 以查看数据库 table 中的 2 列(category_a_id 和 category_b_id)
How can I setup a has_many associated to look in 2 columns in a db table (category_a_id and category_b_id)
我需要能够 link 互相 categories
。
我有一个 category_links
table 有 2 列 category_a_id
和 category_b_id
来保存 2 个类别的 id
linked.
我希望能够调用 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
也会在两列中查找匹配记录?
没有通过 has_many
实现这一点的简单方法,但如果您不必花哨,只需在 Category
上创建一个自定义方法即可:
def category_links
@category_links ||= CategoryLinks.where('category_a_id = ? or category_b_id = ?', id, id)
end
我需要能够 link 互相 categories
。
我有一个 category_links
table 有 2 列 category_a_id
和 category_b_id
来保存 2 个类别的 id
linked.
我希望能够调用 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
也会在两列中查找匹配记录?
没有通过 has_many
实现这一点的简单方法,但如果您不必花哨,只需在 Category
上创建一个自定义方法即可:
def category_links
@category_links ||= CategoryLinks.where('category_a_id = ? or category_b_id = ?', id, id)
end