2017-01-30 6 views
0

私はBigCategoryとSmallCategoryという2つのモデルを持っています。Railsでfriendly_idを使用するには?

class BigCategory < ApplicationRecord 
    extend FriendlyId 
    friendly_id :name, use: :slugged 

    has_many :small_categories, dependent: :destroy 
end 

class SmallCategory < ApplicationRecord 
    extend FriendlyId 
    friendly_id :name, use: :slugged 

    belongs_to :big_category 
end 

私はすべてsmall_categories where big_category_id == params[:big_category_id]を取得したいと思います。

SmallCategory.where(big_category_id: params[:big_category_id]) 

friendly_idの使用はfriendly.find次のとおりです。ここで

SmallCategory.friendly.find(params[:id]) 

params[:id]は、レコードIDです。したがって、上記の場合。美しいURLですべてのsmall_categoriesを取得する方法はありますか?一緒にそれをすべて行うために

答えて

1

より良い方法は、階層構造を構築するために、単一のself-joining modelを使用することです:

class Category < ApplicationRecord 
    belongs_to :parent, class_name: "Category" 
    has_many :sub_categories, foreign_key: "parent_id", class_name: "Category" 
end 

あなたは、あなたが行うことができます見つける2つのレベルをしたい場合:

@parent = Category.includes(:sub_categories) 
        .find(params[:category_id]) 
@category = @parent.sub_categories 
        .friendly.find(params[:id]) 
+0

セルフ・ジョインを使用すると、任意の深さの階層を構築し、「深度」に関係なく同じ表のカテゴリを問い合せることができます。 – max

+0

ありがとうございます。それは良い方法に見えます。私は後で試してみる。 –

関連する問題