2010-08-22 3 views
0

В моем приложении Rails у меня есть отношение has_many_through. Я хочу использовать модель/таблицу join для хранения некоторых данных о соотношении (сколько раз это конкретное отношение используется, чтобы быть конкретным).Получить модель присоединения от has_many_through relation

Я пишу add-method на одном из моих классов, который должен проверять любые существующие отношения с субъектом, обновлять счетчик отношения, если он существует, или создавать его, если он не существует.

Пример:

CoffeeDrinker связано с кофе через Кубок. Каждый раз, когда 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]), но это просто не так. Кроме того, если есть лучший способ, это упростит запись и добавление методов. – fiskeben

+0

К слову: Coffees уже существуют в базе данных и не будут добавлены после запуска приложения. Таким образом, я всегда буду добавлять отношения между существующими объектами, а не создавать. – fiskeben

+0

О, я тебя. Как насчет моего редактирования? Полагаю, вы находите или создаете кофе-напиток на кофейном напитке? – mark

Смежные вопросы