我有一個Selection
模型,其中有許多Choices
和一個DefaultChoice
。 這種關係是這樣構造的。從has_one關係得到意想不到的結果
模型(我覺得這裏有什麼不對)
class Selection < ApplicationRecord
has_many :choices, dependent: :delete_all
has_one :default_choice, class_name: 'Choice'
end
class Choice < ApplicationRecord
belongs_to Selection
end
遷移
create_table :selections do |t|
t.references :default_choice, index: true
end
create_table :choices do |t|
t.belongs_to :selection
end
不知自己是不是正確:
# 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
怎麼來的?
selection.default_choice
生成此查詢:
Choice Load (0.5ms) SELECT "choices".* FROM "choices" WHERE "choices"."selection_id" = $1 LIMIT $2 [["selection_id", 1], ["LIMIT", 1]]
基本上'selection.default_choice'總是返回'selection.choices'的第一個選項。 –
你可以發佈在執行'selection.default_choice'時運行的SQL查詢嗎? – Pavan
我更新了添加SQL查詢的問題 –