2017-01-30 42 views
0

我有兩個模型:BigCategory和SmallCategory。如何在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。所以上面的情況。有沒有辦法讓所有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 

然後,如果您想要做一個兩級發現你可以這樣做:

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

使用自連接可讓您構建任何深度的層次結構,並可查詢同一個表上的類別,而不管其「深度」如何。 – max

+0

謝謝。它看起來是一個好方法。我會在稍後嘗試。 –

相關問題