2010-08-22 53 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