以下是我的模型:
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
这是我尝试找到的结果:
DeckCard.all :joins => [:card, :deck], :conditions => {{:decks => {:game_id => @game.id}}, {:cards => {:present => true}}}
我一直收到错误信息:undefined method for
all
for #Class:0x4b2a98>。我猜测这是从解析我的条件中产生的误导性错误。我遵循Active Record Query的指南。我不确定是否要使用关联的单数或复数形式。看起来,当使用belongs_to时,应在:joins哈希中使用单数形式,但我不确定在:conditions哈希中是否也需要使用单数形式,因此我尝试了两种方式,但都没有成功。如果不清楚,我想在SQL中做的事情是:
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
目前我可以通过使用DeckCard.find_by_sql
来解决这个问题,但弄清为什么关联的连接和条件不起作用会更好。
我正在使用Windows上的InstantRails-2.0,其中使用的是Rails 2.0.2版本。
编辑:使用DeckCard.find(:all ...)
取得了一些进展。我还根据另一个答案修改了括号。我的最新代码如下:
DeckCard.find :all, :joins => [:card, :deck], :conditions => {:deck => {:game_id => @game.id}, :cards => {:present => true}}
产生以下错误:
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')
连接看起来是正确的,但WHERE条件不正确。我尝试了几种不同的方法,例如在条件子句中使用
:deck
或:decks
,但没有成功。这可能是当前的ActiveRecord查询接口文档和2.0.2中执行条件的方式之间的另一个区别吗?谢谢!