2010-08-22 88 views
0

加盟模式在我的Rails應用我有一個has_many_through關係。我想使用的連接模型/表中的一些數據存儲有關的關係(特定關係使用多少次,是特定的)。得到has_many_through關係

我上我的班,應檢查是否有主題爲任何現有關係,更新計數器上的關係,如果存在或創建它,如果它不存在的一個寫一個附加的方法。

示例:

CoffeeDrinker與Coffee through Cup有關。每次CoffeeDrinker需要啜飲一杯特定杯子的計數器都應該增加。 CoffeeDrinker第一次喝了一口,杯子應該被創建並且計數器被初始化。

什麼是讓關係對象上保持最簡單的和/或最正確的方法是什麼?

回答

1

要麼我不理解你的問題或你會驚奇地發現,這明顯是。 你已經定義的關係像這樣:

#coffee_drinker.rb 
has_many :cups 
has_many :coffees, :through => :cup 

#cup.rb 
belongs_to :coffee 
belongs_to :coffee_drinker 

#coffee.rb 
has_many :cups 
has_many :coffee_drinkers, :through => :cup 

coffee_drinker.cups 
coffee_drinker.coffees 

coffee.cups 
coffee.coffee_drinkers 

#coffee_drinker.rb 
after_save :update_cups_drunk 

def update_cups_drunk 
    cups.find_by_coffee_id(coffee_id).increment!(:count) 
end 

#maybe you don't have access to the coffee_id 

def update_cups_drunk 
    cups.find_by_coffee_id(coffees.last.id).increment!(:count) 
end 
+0

組合,我猜這讓我解釋: 給定一個特定的CoffeeDrinker和咖啡,我需要實際的杯子涉及兩個。我該如何解決這個問題? 當然,我可以做cup = Cup.find(:first,:conditions => ['coffee_drinker_id'=> self.id,'coffee_id'=> coffee.id]),但它感覺不對。另外,如果有更好的方法,它會使我的add和get方法更容易編寫。 – fiskeben 2010-08-22 09:18:35

+0

順便說一句:在已有的咖啡存在於數據庫中,一旦應用程序運行時不會被添加。因此,我將永遠在現有對象之間添加關係,而不是創建。 – fiskeben 2010-08-22 09:29:33

+0

哦,我得到你。我的編輯如何?我把它看成你正在尋找或實例化咖啡飲料的咖啡飲料? – mark 2010-08-22 09:38:58