Rails:如何使实例具有相同的关联数组

时间:2018-06-14 14:09:23

标签: ruby-on-rails activerecord

我在两个模型之间存在多对多关系,以这种方式链接:

class Product < ApplicationRecord
    has_many :categoriesproducts
    has_many :categories, through: :categoriesproducts
end

class Category < ApplicationRecord
    has_many :categoriesproducts
    has_many :products, through: :categoriesproducts
    has_and_belongs_to_many(:categories,
     :join_table => "category_connections",
     :foreign_key => "category_a_id",
     :association_foreign_key => "category_b_id")
end

class Categoriesproduct < ApplicationRecord
    belongs_to :products
    belongs_to :category
end

因此:

  • 产品可以有多个类别
  • 一个类别可以有很多产品
  • 类别可以包含多个类别

用户可以在表单中查询数据库选择类别。假设我们在DB中有这个:

  • 第1类有[类别3]
  • 第2类有[类别3]
  • 产品A有[类别1,类别3]
  • 产品B有[类别2,类别3]

如果用户在表格中仅选择类别3中的类别3,我只想获得产品A.

我有以下查询:

Product.joins(:categories).where(categories: {id: [1,3]})

这使我所有产品都具有1类或3类=产品A和产品B.

如何获得具有与数组完全匹配的类别的产品?例如,只有具有类别1和3的那些,在示例中=产品A

1 个答案:

答案 0 :(得分:0)

我做的事情如下:

Product.includes(:categories).select { |p| p.category_ids == [1,3] }