在schema.rb
我有
create_table "answers", force: :cascade do |t|
t.text "content"
t.integer "question_id"
t.integer "user_id"
t.boolean "judge_choice", default: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["question_id", "user_id"], name: "index_answers_on_question_id_and_user_id", unique: true
t.index ["question_id"], name: "index_answers_on_question_id"
t.index ["user_id"], name: "index_answers_on_user_id"
end
在迁移文件中,我尝试add_index
这样add_index :answers, [:question_id, :judge_choice], unique: true, where: "judge_choice is true"
is true
或IS TRUE
等等,如果点击rails db:migrate
sqlite3一直抱怨
"没有这样的专栏:真"
如果更改为where: "judge_choice"
,它将成功迁移,但唯一索引才能胜任。我可以在控制台中使用相同的question_id
和judge_choice:true
添加尽可能多的答案。
我的意图:我想要做的是添加数据库级唯一性,以确保每个问题只有一个judge_choice
为真的答案。
答案 0 :(得分:0)
我通过从sqlite3迁移到postgresql解决了这个问题。 where: "judge_choice is true"
pg
没有给我带来麻烦。部分唯一索引正在运行。也许它可以在sqlite3中解决,所以我仍然愿意听到其他的声音。