【发布时间】: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:false 和default:false 不在schema.rb 中,显然Rails 没有实现这些验证。我应该如何在迁移文件中实现这些验证?
我也尝试过使用change_column_null 和change_column_default,但结果/schema.rb 相同。
【问题讨论】:
-
您在运行迁移后是否一直在编辑迁移?
标签: ruby-on-rails ruby-on-rails-4 sqlite