我试图在数据库级别添加验证。对于模型文件,它没有问题,但现在对于迁移文件,我只是不知道如何做到这一点。我正在使用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。
答案 0 :(得分:0)
Rails确实允许您向迁移中的列提供null
和default
个选项。
编辑用户迁移文件后,您是否重新运行它?
您可以rake db:rollback
后跟rake db:migrate
如果您最后一次运行CreateUsers
和AddIndexToUsersEmailAndUsername
,那么您应该使用rake db:rollback STEP=2