2016-11-03 2 views
1

私にはProductCategoryProductという2つのモデルがあります。 ProductモデルはProductCategoryに属し、製品カテゴリにはそれに応じて多くの製品が含まれます。場合によっては、具体的なProductCategoryに属するProductを返すフィルタを実装する必要がある場合があります。これらは私のモデルです:他のモデルに属するモデルをフィルタリングする

class ProductCategory < ActiveRecord::Base 
    has_many :products 
end 

class Product < ActiveRecord::Base 
    belongs_to :product_category 

    # Here I added some kind of filter method 
    # But I haven't managed how to use it yet 

    def self.filter(filter) 
    where(product_category_id: filter) if filter 
    end 
end 

そして、私のコントローラで私はこのような何かを追加しました:

class ProductsController < ApplicationController 
    def index 
    if params[:product] 
     @products = Product.filter(params[:product][:product_category] 
    else 
     @products = Product.all 
    end 
    end 
end 

をしかし、私は実際に私のフィルタを使用する方法を管理することはできませんし、私はそれをたくさんリファクタリング必要がありますね。誰でも助けてくれますか?

+3

クラスメソッドの代わりにスコープを使用することをお勧めします。 –

+1

関連付けがある場合、なぜフィルタが必要ですか? 'category.products'を取得できます – Deep

答えて

1

とすると、params[:product][:product_category]は、ProductCategory IDとする。

class ProductsController < ApplicationController 
    def index 
    if params[:product] 
     @category = ProductCategory.find(params[:product][:product_category]) 
     @products = @category.products 
    else 
     @products = Product.all 
    end 
    end 
end 

IDよりも何かparams[:product][:product_category]場合は、代わりにfindfind_byを使用しています。

関連する問題