2016-03-15 73 views
-1

我正在開發一個Ruby on Rails應用程序與MySQL和我的數據庫中有一個類別表。 我想將子類別添加到其中一個類別。 我想爲子類創建一個新表,或者只是將它們添加到相同的Categories表中。誰能幫忙?如何添加一個表連接到一行

+0

爲什麼不只是添加一個'parent_id'列? – tadman

+0

您可以添加到'Categories'表'parent_category_id'字段。在此字段中,您將保存父類別的標識,如果此字段爲空,則類別位於頂層,否則它的子類別爲 –

+0

,謝謝您的工作。 – Joma

回答

0

由於sub_category只不過是一個category與父母聯繫,你可以只保存在一個表中都categoriessub_categories及導線上的關聯。這種類型的關聯被稱爲自連接關聯。

嘗試以下操作:

class Category < ActiveRecord::Base 
    has_many :sub_categories, class_name: 'Category', foreign_key: :parent_id 
    belongs_to :parent, class_name: 'Category' 
end 

參考Self Joins Association獲取更多信息。

您需要安裝以下遷移:

class AddParentIdToCategories < ActiveRecord::Migration 
    def change 
    add_column(:categories, :parent_id, :integer) 
    end 
end 

並運行遷移:

bundle exec rake db:migrate 

如果你期待你的樹結構更加複雜,例如,具有sub_sub_categories - 行業標準和更多,那麼你可以看看抽象這個功能的幾個寶石。

參考acts_as_tree,並ancestry脫穎而出的詳細信息,

+0

好吧,這是有幫助的,但現在我仍然無法使用'Category.sub_categories'訪問它們。應該有某種引用我應該使用遷移,但我不知道如何去做。 我通常使用Mongodb的軌道,這顯然更容易 – Joma

+0

你究竟想要檢索什麼? Sub_categories與一個類別實例綁定,因此您首先需要加載一個類別,然後調用它的子類別。如果你有什麼所有的子類別,那麼你需要在其中parent_id爲零的類別上定義一個名爲sub_categories的命名範圍。 – Dharam

+0

我試圖檢索與類別綁定的子類別。 我試圖加載實例,但它始終顯示'未定義的方法'sub_categories'爲#' – Joma

相關問題