Frage

In meiner Rails-Anwendung ich eine has_many_through Beziehung haben. Ich möchte das Modell / table verwenden beitreten einige Daten über die Beziehung zu speichern (wie oft diese besondere Beziehung verwendet wird, um genau zu sein).

Ich bin eine Add-Methode auf einen meiner Klassen zu schreiben, die für jede bestehende Beziehung mit dem Thema überprüfen sollten, aktualisieren Sie einen Zähler auf die Beziehung, wenn es vorhanden ist oder es schaffen, wenn es nicht vorhanden ist.

Beispiel:

CoffeeDrinker wird Kaffee durch Cup bezogen. Jedes Mal, CoffeeDrinker nimmt eine an diesem Cup einen Zähler trinken sollte erhöht werden. Das erste Mal CoffeeDrinker einen Schluck nimmt, sollte der Cup erstellt und der Zähler initialisiert werden.

Was ist die einfachste und / oder korrekteste Art und Weise einen Einfluß auf die Beziehung Objekt zu bekommen?

War es hilfreich?

Lösung

Entweder verstehe ich Ihre Frage nicht oder du wirst überrascht sein, wie offensichtlich ist dies. Sie haben die Beziehung, wie so definiert:

#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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top