2016-09-26 3 views
2

私はアソシエーションについて混乱しています。 以下のコードを書こうとしましたが、レールが返されました "未定義のメソッド` subs '"。アソシエーションルールを適用するには

def show 
    @product = Product.find(params[:id]) 
    @materials = @product.materials.subs 
    respond_to do |format| 
    format.json { render json: [ @product,@materials ]} 
    end 
end 

私は製品モデルがサブモデルに関連しており、サブモデルレコードを取得したいと思っています。 誰かが解決するためにこの問題について知っていれば教えてください。

class Product < ActiveRecord::Base 
    has_many :product_materials 
    has_many :materials, :through => :product_materials 
end 

class ProductMaterial < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :material 
end 

class Material < ActiveRecord::Base 
    has_many :product_materials 
    has_many :products, :through => :product_materials 
    has_many :material_subs 
    has_many :subs, :through => :material_subs 
end 

class MaterialSub < ActiveRecord::Base 
    belongs_to :material 
    belongs_to :sub 
end 

class Sub < ActiveRecord::Base 
    has_many :material_subs 
    has_many :materials, :through => :material_subs 
end 

答えて

2

@product.materials配列であり、あなたは、配列

@product = Product.includes(materials: :subs).find(params[:id]) 
@materials = @product.materials.flat_map(&:subs) 

にチェーン関連を材料に勝るこの意志ループをすることはできませんし、各material

+1

'、1分ago'を尋ねたためsubsを返します。 「1分前に答えました」 - それはかなり速いです! –

+1

はn + 1に提供し、 'includes'を使用します –

+0

完全に解決しました。どうもありがとうございます!! – johnny

関連する問題