2014-12-09 1 views
0
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, но я не уверен, как добавить это здесь, все, что я мог найти, это запросы с диапазонами. Я уверен, что это просто, я просто еще не там.ActiveRecord добавив диапазон рейтинга миграционную файла

ответ

3

Вам не нужно указывать диапазон целочисленных значений в файле миграции. Файл миграции просто используется для добавления столбца базы данных для хранения рейтинга. Это не место для добавления валидаций.

Вы должны использовать модель Book, чтобы уточнить критерии проверки, что ваш ratings относится к определенному ассортименту. Что-то вроде этого:

class Book < ActiveRecord::Base 
    validates :rating, :inclusion => { :in => 0..100 } 
end 

Я настоятельно рекомендую прочитать Rails разметил как migrations и validations.

+0

да, я полагал, что я был в неправильном месте. ха-ха. Спасибо .. я думаю, что работает. – Diego

+0

Несомненно. После того, как вы его заработаете, подумайте о том, чтобы ответ был ответом, если он ответил на ваш вопрос :) –

+0

Я раньше не принимал ответ, как я это делаю. кстати, я просто написал твиттер кода, и ваш ответ хорошо работал =) Я взволнован. @JoelBrewer – Diego

3

Возможно, я опоздал с ответом. Но это можно определить проверку на уровне БД с проектом миграции валидаторов: 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 (как заявление внутри триггера или контрольного ограничения, в зависимости от вашего db), так и вашей модели

SQL (Postgre SQL):

=# 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 
Смежные вопросы