【问题标题】:rails: sqlite3 no such column error when adding partial unique indexrails:sqlite3添加部分唯一索引时没有这样的列错误
【发布时间】: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_idjudge_choice:true 添加任意数量的答案。

我的意图:我试图做的是添加数据库级别的唯一性,以确保只有一个答案的judge_choice 对每个问题都是正确的。

【问题讨论】:

    标签: ruby-on-rails ruby sqlite


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-03
      • 2020-07-27
      • 2022-01-18
      • 1970-01-01
      • 2020-11-06
      • 2015-09-15
      • 2015-03-25
      • 2012-02-01
      相关资源
      最近更新 更多