class AddRatingToBooks < ActiveRecord::Migration
def up
add_column :books, :rating, :integer
end
def down
remove_column :books, :rating
end
我在db/migrate/
中有以下代码段,我正在尝试将ratings
添加到我的books
表中,它位于范围内来自 0-100 ,但我不知道如何在这里添加,我所能找到的只是查询范围。我确定这很简单,我还没有。
答案 0 :(得分:3)
您无需在迁移文件中指定整数值范围。迁移文件仅用于添加数据库列以存储评级。这不是添加验证的地方。
您应该使用Book
模型指定验证,以确保ratings
落在特定范围内。像这样:
class Book < ActiveRecord::Base
validates :rating, :inclusion => { :in => 0..100 }
end
我强烈建议您阅读migrations和validations上的Rails指南。
答案 1 :(得分:3)
可能我的答案太迟了。但是可以使用Migration Validators项目在db级别上定义验证:https://github.com/vprokopchuk256/mv-core
例如,在您的迁移中:
def change
change_table :books do |t|
t.integer :rating, inclusion: 0..100
end
end
然后在你的模型中:
class Book < ActiveRecord::Base
enforce_migration_validations
end
结果您的验证将在db(作为触发器或检查约束内的语句,取决于您的数据库)和模型中定义
SQL(PostgreSQL):
=# insert into books(rating) values(10);
INSERT 0 1
=# insert into books(rating) values(200);
ERROR: new row for relation "books" violates check constraint "chk_mv_books_rating"
Rails控制台:
Book.new(title: 10).valid?
=> true
Book.new(title: 200).valid?
=> false