Это следует за this вопросом, на который был дан ответ. Я действительно обнаружил, что могу удалить соединение из этого запроса, так что теперь рабочий запрос
start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]
Это работает. Однако, когда я пытаюсь переместить эти DeckCards в другую ассоциацию, я получаю ошибку 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, но он отлично подходит для добавления в руку игрока. У меня есть столбцы tableau_id
и hand_id
в таблице DeckCard.
Я просмотрел ReadOnlyRecord в rails api, и он не говорит много за описанием.