Esto sigue a this pregunta previa, que fue respondida. De hecho, me descubrí que podía quitar una combinación desde esa consulta, por lo que ahora la consulta de trabajo es¿Qué está causando este error ActiveRecord :: ReadOnlyRecord?
start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]
Esto parece funcionar. Sin embargo, cuando intento mover estos DeckCards a otra asociación, obtengo el error ActiveRecord :: ReadOnlyRecord.
Aquí está el código
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
y los modelos relevantes (cuadro son las tarjetas de los jugadores en la mesa)
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
que estoy haciendo una acción similar justo después de este código, añadiendo DeckCards
a la jugadores, y ese código funciona bien. Me preguntaba si necesitaba belongs_to :tableau
en el modelo DeckCard, pero funciona bien para agregar a la mano del jugador. Tengo una tableau_id
y hand_id
columnas en la tabla DeckCard.
Busqué ReadOnlyRecord en la API apéndices, y no dice mucho más allá de la descripción.
el: incluir es útil para reducir el n. ° de consultas realizadas, no lo sabía; pero traté de arreglarlo cambiando la asociación de Tableau/Deckcards a un has_many: through, y ahora recibo un mensaje 'could not find association'; Puede que tenga que publicar otra pregunta para ese – user26270
@codeman, sí, el: incluir reducirá el número de consultas * y * incluirá la tabla incluida en el alcance de su condición (una especie de combinación implícita sin que Rails marque sus registros como leídos). solamente, que lo hace tan pronto como huele algo SQL-ish en su hallazgo, incluyendo: join /: select clauses IIRC – vladr
Para que 'has_many: a, through =>: b' funcione, la asociación B debe declararse también , por ejemplo, 'has_many: b; has_many: a,: a través =>: b', espero que este sea tu caso? – vladr