Rail ActiveRecord 获取所有多对多关系

Rail ActiveRecord get all many to many relations

我在这里浏览过类似的问题,但似乎无法理解它们。

我有 3 个表 ItemsSizesItem_Sizes,其中 Items 有很多 SizesItem_Sizes

item.rb:

class Item < ApplicationRecord
  has_many :images

  has_many :category_items
  has_many :categories, through: :category_items

  has_many :item_sizes
  has_many :sizes, through: :item_sizes

  has_many :colour_items
  has_many :colours, through: :colour_items
end

size.rb

class Size < ApplicationRecord
    has_many :item_sizes
    has_many :items, :through => :item_sizes
end

item_size.rb:

class ItemSize < ApplicationRecord
    belongs_to :item
    belongs_to :size
end

这似乎一切正常。但我想知道如何获取与项目子集关联的所有 Sizes

我已经编写了一个循环来执行此操作,但我怀疑它是否非常有效。

def get_all_sizes(items)
    results = []
    items.each do |item|
      item.sizes.each do |size|
        results << size unless results.include?(size)
      end
    end
    
    results
  end

是否有合适的查询可以代替这个 for 循环?

一行即可完成。

result = items.map{|item| item.sizes }.flatten.uniq

我想你可以加入 Item_Sizes table 并通过项目的 ID 获取尺寸:

Size.joins(:item_sizes).where(item_sizes: { item_id: items.ids })