rails:sqlite3添加部分唯一索引时没有这样的列错误

时间:2017-10-02 10:18:57

标签: ruby-on-rails ruby sqlite

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 trueIS TRUE等等,如果点击rails db:migrate sqlite3一直抱怨

,那就不重要了
  

"没有这样的专栏:真"

如果更改为where: "judge_choice",它将成功迁移,但唯一索引才能胜任。我可以在控制台中使用相同的question_idjudge_choice:true添加尽可能多的答案。

我的意图:我想要做的是添加数据库级唯一性,以确保每个问题只有一个judge_choice为真的答案。

1 个答案:

答案 0 :(得分:0)

我通过从sqlite3迁移到postgresql解决了这个问题。 where: "judge_choice is true" pg没有给我带来麻烦。部分唯一索引正在运行。也许它可以在sqlite3中解决,所以我仍然愿意听到其他的声音。