J'ai un modèle Selection
qui a beaucoup Choices
et un DefaultChoice
. La relation est structurée de cette façon.Obtenir un résultat inattendu de has_one relation
modèles (je pense ici il y a quelque chose de mal)
class Selection < ApplicationRecord
has_many :choices, dependent: :delete_all
has_one :default_choice, class_name: 'Choice'
end
class Choice < ApplicationRecord
belongs_to Selection
end
Migration
create_table :selections do |t|
t.references :default_choice, index: true
end
create_table :choices do |t|
t.belongs_to :selection
end
D'une certaine façon quelque chose ne va pas:
# let's say:
selection = Selection.find(1)
selection.choices << Choice.find(1)
selection.choices << Choice.find(2)
selection.default_choice = Choice.find(2)
selection.save!
# then
selection.default_choice_id = 2
# but
selection.default_choice.id = 1
Comment venir ?!
selection.default_choice
génère cette requête:
Choice Load (0.5ms) SELECT "choices".* FROM "choices" WHERE "choices"."selection_id" = $1 LIMIT $2 [["selection_id", 1], ["LIMIT", 1]]
Fondamentalement, elle retourne 'selection.default_choice' de toujours le premier choix de' selection.choices'. –
Pouvez-vous poster la requête SQL qui s'exécute quand vous faites 'selection.default_choice' – Pavan
J'ai mis à jour la question en ajoutant la requête SQL –