Rail ActiveRecord 获取所有多对多关系
Rail ActiveRecord get all many to many relations
我在这里浏览过类似的问题,但似乎无法理解它们。
我有 3 个表 Items
、Sizes
和 Item_Sizes
,其中 Items
有很多 Sizes
到 Item_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 })
我在这里浏览过类似的问题,但似乎无法理解它们。
我有 3 个表 Items
、Sizes
和 Item_Sizes
,其中 Items
有很多 Sizes
到 Item_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 })