Saya telah melihat melalui pertanyaan serupa di sini tetapi sepertinya tidak dapat memahaminya.

Saya memiliki 3 tabel Items, Sizes, dan Item_Sizes di mana Items memiliki banyak Sizes hingga Item_Sizes.

Barang.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

Itu semua tampaknya berhasil. Tapi saya bertanya-tanya bagaimana cara mendapatkan semua Sizes yang terkait dengan subset item.

Saya telah menulis loop untuk melakukan ini tetapi saya ragu itu sangat efisien.

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

Apakah ada kueri yang tepat yang dapat saya gunakan sebagai pengganti for loop ini?

0
dhenry437 12 Mei 2021, 03:08

2 jawaban

Jawaban Terbaik

Saya pikir Anda bisa bergabung dengan tabel Item_Sizes dan mendapatkan ukuran dengan id item:

Size.joins(:item_sizes).where(item_sizes: { item_id: items.ids })
0
amrrbakry 12 Mei 2021, 00:28

Anda dapat melakukannya dalam satu baris.

result = items.map{|item| item.sizes }.flatten.uniq
0
Asbah Ishaq 12 Mei 2021, 00:24