2012-09-21 155 views
0

在我的應用程序中,我有以下型號:List,ItemCategoryRuby on Rails:建模外鍵關係。

每個項目belong_to的一個列表。 每個項目belongs_to一個類別。

每個項目列表還需要以某種方式與多個類別相關聯。這意味着如果用戶創建了一個類別,它將有一個list_id分配給它,等於id用戶創建類別時正在處理的列表。這樣,當用戶決定擺脫列表時,我也可以擺脫爲該列表創建的所有自定義類別。問題是我還想要一些「默認」類別:可用於所有列表的類別。我不知道如何建模listscategories之間的關係。 belongs_to不適用於我,因爲「默認」類別不屬於任何特定列表,它們屬於所有列表。

我非常感謝任何有關如何處理這種關係的建議!

回答

0

你肯定需要has_many關係,兩邊Category - List的關係。

您可以將類別名稱作爲類別模型中常量的「默認值」,或者該類別可以具有布爾屬性,以便知道是否刪除它。

要在刪除列表時刪除類別,您可能需要編寫一個自定義方法,該方法可以作爲List模型中的after_destroy回調運行。

0

您希望爲您的類別和列表模型設置多對多關係。要做到這一點,這是你會做什麼

class List < ActiveRecord::Base 
    has_many :categorizations, dependent: :destroy 
    has_many :categories, :through => :categorize 
end 

class Categorization < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :list 
end 

class Category < ActiveRecord::Base 
    has_many :categorizations, dependent: :destroy 
    has_many :lists, :through => :categorizations 
end 

class Item < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :list 
end 

這將創建第三個表來跟蹤所有的模型之間的關係。瑞恩貝茨在這個問題上有一個很棒的railscast,你應該去看看。

然後dependent: :destroy將確保如果刪除一個關係,然後確保其他類別從該列表中刪除,您可以使用before_destroy或after_destroy方法。