通过Rails 5.1中的self_join关联从has_many关联中获取对象

时间:2018-03-11 05:26:20

标签: ruby-on-rails ruby-on-rails-5

我有两个模型,_product。产品型号与变体模型具有variation关系。我还有一个has_many模型,它与产品模型有自联系关系。

我要做的是从变体模型中获取与匹配产品有关系的对象。

product.rb

match

variation.rb

class Product < ApplicationRecord
  ...
  has_many :variations, -> { order(:order) }, dependent: :destroy
  has_and_belongs_to_many :categories
  has_and_belongs_to_many :tags
  has_many :matches
  has_many :matched_products, through: :matches
  ...
end

match.rb

class Variation < ApplicationRecord
  ...
  VARIATION_ORDER = %w[1 2 3 4 5 6 7 8 9 10]
  validates :product_id, presence: true
  has_and_belongs_to_many :categories
  has_and_belongs_to_many :tags
  has_many :products
  belongs_to :product
  ...
end

产品/ show.html.erb 这为我提供了匹配产品的名称对象,但我还希望获得与匹配产品相关联的变体名称

class Match < ActiveRecord::Base
  belongs_to :product
  belongs_to :matched_product, class_name: 'Product'
end

1 个答案:

答案 0 :(得分:1)

为了获取变体图像的名称,您可以这样做:

c.matched_product.variations.pluck(:image).join(', ')

不要忘记使用includes(:variations)来避免 N + 1次查询,即:@product.matches.includes(:variations)