【发布时间】:2017-10-02 21:29:39
【问题描述】:
rails 版本 5.1.3,ruby 版本 2.4.1,我桌面上的 sqlite 版本是 3.11.0,gem sqlite3 版本是 1.3.13。
在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一直在抱怨
“没有这样的列:true”
如果更改为where: "judge_choice",那么它将成功迁移,但唯一索引将不起作用。我可以在控制台中使用相同的question_id 和judge_choice:true 添加任意数量的答案。
我的意图:我试图做的是添加数据库级别的唯一性,以确保只有一个答案的judge_choice 对每个问题都是正确的。
【问题讨论】:
标签: ruby-on-rails ruby sqlite