Hier sind meine Modelle:rails: was ist los mit diesem multiple beitreten mit Bedingungen auf den Verbänden?
class Deck < ActiveRecord::Base
belongs_to :game
has_many :deck_cards
end
class DeckCard < ActiveRecord::Base
belongs_to :card
belongs_to :deck
end
class Card < ActiveRecord::Base
end
Hier ist mein Versuch Fund:
DeckCard.all :joins => [:card, :deck], :conditions => {{:decks => {:game_id => @game.id}}, {:cards => {:present => true}}}
Ich erhalte die Fehlermeldung: nicht definierte Methode für all
für #class: 0x4b2a98>. Ich nehme an, dies ist ein irreführender Fehler beim Parsen meiner Bedingungen. Ich folge dem Leitfaden für Active Record Query. Ich war mir nicht sicher, ob ich die Singular- oder Pluralform der Assoziationen verwenden sollte. Sieht aus wie mit einem belongs_to, du solltest singular form im: joins jough verwenden, aber ich war mir nicht sicher in dem: conditions Hash, also habe ich beides versucht und keiner hat funktioniert.
Falls es nicht klar ist, was ich versuche, in SQL zu tun ist:
SELECT * from DeckCards
INNER JOIN decks on decks.id = deck_cards.deck_id
INNER JOIN cards on card.id = deck_cards.card_id
WHERE decks.game_id = 4
AND cards.present = true
Ich bin in der Lage jetzt um es zu erhalten, indem DeckCard.find_by_sql
verwenden, aber es wäre schön, herauszufinden, warum die Joins und Bedingungen für Assoziationen nicht funktionieren.
Ich bin mit Instant-2.0 auf Fenster, die Rails 2.0.2
Herausgegeben verwendet: einige Fortschritte mit DeckCard.find(:all ...)
statt. Ich habe auch die Klammern basierend auf einer anderen Antwort bearbeitet. Mein letzter Code ist
DeckCard.find :all, :joins => [:card, :deck], :conditions => {:deck => {:game_id => @game.id}, :cards => {:present => true}}
, die die folgenden Fehler erzeugt:
Unknown column 'deck_cards.decks' in 'where clause': SELECT `deck_cards`.* FROM `deck_cards` INNER JOIN `cards` ON `cards`.id = `deck_cards`.card_id INNER JOIN `decks` ON `decks`.id = `deck_cards`.deck_id WHERE (`deck_cards`.`decks` = '--- \n- :game_id\n- 5\n' AND `deck_cards`.`cards` = '--- \n- :present\n- true\n')
Das schließt sich korrekt aber nicht die WHERE-Bedingungen auftreten. Ich habe ein paar verschiedene Dinge wie :deck
oder :decks
in der Klausel Bedingung versucht, aber kein Glück. Könnte dies ein weiterer Unterschied zwischen den aktuellen ActiveRecord Query Interface-Dokumenten und den Bedingungen in 2.0.2 sein?
Danke!
Dieses noch scheint mir ein Syntaxfehler, da wird es nicht Identifizieren Sie sogar die Klasse DeckCard mit Namen. Kannst du die umgebende Methode für die DeckCard.all Zeile posten? – Pesto
Siehe meine aktualisierte Antwort für einen anderen Vorschlag. –