【问题标题】:How to add validation in migration file (Rails 4)如何在迁移文件中添加验证(Rails 4)
【发布时间】:2015-06-16 16:24:12
【问题描述】:

我正在尝试在数据库级别添加验证。对于模型文件,这没问题,但现在对于迁移文件,我只是不知道如何做到这一点。我正在使用 SQLite 进行开发(遵循 Hartl 的教程,但针对我自己的应用修改了说明)。

我有以下两个迁移文件:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|

      t.string  :email,           null: false
      t.string  :email_confirm,   null: false
      t.string  :username,        null: false
      t.text    :bio
      t.string  :location,        null: false
      t.boolean :activated,       default: false
      t.datetime :activated_at

      t.timestamps             null: false
    end
  end
end

和:

class AddIndexToUsersEmailAndUsername < ActiveRecord::Migration
  def change
    add_index :users,  :email,         unique: true
    add_index :users,  :username,      unique: true
  end
end

但验证不会在 schema.rb 中结束:

ActiveRecord::Schema.define(version: 20150410200022) do

  create_table "Users", force: :cascade do |t|
    t.string   "email"
    t.string   "email_confirm"
    t.string   "username"
    t.text     "bio"
    t.string   "location"
    t.boolean  "activated"
    t.datetime "activated_at"
    t.datetime "created_at",    null: false
    t.datetime "updated_at",    null: false
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["username"], name: "index_users_on_username", unique: true

end

所以null:falsedefault:false 不在schema.rb 中,显然Rails 没有实现这些验证。我应该如何在迁移文件中实现这些验证?

我也尝试过使用change_column_nullchange_column_default,但结果/schema.rb 相同。

【问题讨论】:

  • 您在运行迁移后是否一直在编辑迁移?

标签: ruby-on-rails ruby-on-rails-4 sqlite


【解决方案1】:

Rails 允许您为迁移中的列提供 nulldefault 选项。

编辑完用户迁移文件后,是否重新运行?

您可以先输入rake db:rollback,然后输入rake db:migrate

如果您最后运行了CreateUsersAddIndexToUsersEmailAndUsername,您应该使用两个步骤进行回滚,例如rake db:rollback STEP=2

【讨论】:

  • 我已经完成了bundle exec rake db:reset 然后bundle exec rake db:migrate。我想这甚至比回滚更好......?所以这不应该是问题。
  • 我尝试了bundle exec rake db:migrate VERSION=0 然后bundle exec rake db:migrate。这行得通! Schema.rb 现在确实包含 nulldefault 选项。
猜你喜欢
  • 2014-05-13
  • 2021-03-21
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2015-08-23
相关资源
最近更新 更多