【发布时间】:2010-10-12 07:06:48
【问题描述】:
这是我的模型:
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}}}
我不断收到错误消息:all #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 中的条件如何完成之间的另一个区别吗?
谢谢!
【问题讨论】:
-
这仍然让我感到语法错误,因为它甚至无法通过名称识别类 DeckCard。您可以发布 DeckCard.all 行的环绕方法吗?
-
查看我的更新答案以获取其他建议。
标签: ruby-on-rails ruby activerecord join