从has_many_through关系中获取连接模型

时间:2010-08-22 08:55:54

标签: ruby-on-rails has-many-through

在我的Rails应用程序中,我有一个has_many_through关系。我想使用连接模型/表来存储关于关系的一些数据(特定关系的使用次数,具体而言)。

我正在我的一个类上编写一个add-method,它应该检查与主题的任何现有关系,如果它存在则更新关系的计数器,如果它不存在则创建它。

示例:

CoffeeDrinker与Coffee through Cup相关。每次CoffeeDrinker啜饮一个特定杯子的计数器都应该增加。 CoffeeDrinker第一次啜饮,应该创建杯子并且计数器初始化。

获取关系对象的最简单和/或最正确的方法是什么?

1 个答案:

答案 0 :(得分: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