这遵循了前面的问题,这个问题已经得到了回答。实际上我发现我可以从那个查询中删除一个连接,所以现在工作的查询是
start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]
这似乎奏效了。然而,当我试图将这些deck移动到另一个关联时,我得到ActiveRecord::ReadOnlyRecord错误。
下面是代码
for player in @game.players
player.tableau = Tableau.new
start_card = start_cards.pop
start_card.draw_pile = false
player.tableau.deck_cards << start_card # the error occurs on this line
end
和相关的模型(tableau是桌子上的玩家卡)
class Player < ActiveRecord::Base
belongs_to :game
belongs_to :user
has_one :hand
has_one :tableau
end
class Tableau < ActiveRecord::Base
belongs_to :player
has_many :deck_cards
end
class DeckCard < ActiveRecord::Base
belongs_to :card
belongs_to :deck
end
我在这段代码之后做了类似的操作,将DeckCards添加到玩家手上,这段代码工作正常。我想知道我是否需要belongs_to:tableau在DeckCard模型,但它工作得很好,添加到玩家的手。我有一个tableau_id和hand_id列在DeckCard表。
我在rails api中查找了ReadOnlyRecord,除了描述之外,它并没有提供太多信息。