다음은 이 이전 질문에 대한 답변입니다. 실제로 해당 쿼리에서 조인을 제거 할 수 있음을 발견 했으므로 이제 작동중인 쿼리는
start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]
이것은 작동하는 것 같습니다. 그러나 이러한 DeckCard를 다른 연결로 이동하려고하면 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
관련 모델 (테이블은 테이블의 플레이어 카드입니다)
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 모델에 필요한지 궁금 했지만 플레이어의 손에 추가하는 것이 좋습니다. DeckCard 테이블에 tableau_id
및 hand_id
열 이 있습니다 .
Rails API에서 ReadOnlyRecord를 찾았으며 설명을 넘어서는 말은 많지 않습니다.