2011-04-01 2 views
0

Я использую Rails 3. Я не знаю, является ли правило рельсов внутри миграции, кажется, я не могу вставить данные в таблицу базы данных. Если кто-то может это подтвердить.Не удается вставить данные в базу данных при миграции?

Я попытался следующие вещи:

у меня есть две ActiveRecord модели:

class Car < ActiveRecord::Base 
    has_many :users 
    ... 
end 

class User < ActiveRecord::Base 
    belongs_to :car 
    ... 
end 

У меня есть создать файл миграции внутри миграции у меня есть:

def self.up 
    default_car = Car.new({:name => 'default_car'}) 
    default_car.save() #I got 'false' here 

    User.create!(:car_id => default_car.id}) #I got default_car.id is null value 

    end 

    def self.down 
    default_car = Car.find({:name => 'default_car'}) 
    default_user = User.find({:car_id=>default_car.id}) 

    default_car.delete 
    default_user.delete 
    end 

Я получил false, когда я пытаюсь сохранить default_car в базе данных, а мой default_user имеет null car_id.

Это потому, что в миграции, это НЕ разрешено для хранения данных в базе данных ??

+0

есть ли какие-либо проверки в модели автомобилей? – fl00r

+1

little debug: 'default_car = Car.new ({: name => 'default_car'}); default_car.save(); puts default_car.errors' – fl00r

+0

Право! есть несколько утверждений. Сейчас я меняю его. «ошибки» дают место :) – Mellon

ответ

3

Вы можете создавать данные в миграциях, однако, скорее всего, лучше не использовать seeds.rb.

Думайте, что это будет ошибкой, потому что ваш автомобиль не спасает, я предполагаю, что у вас есть валидация в вашей модели автомобиля.

+0

Справа! есть несколько утверждений. – Mellon

+2

Старое правило состояло в том, что если вы используете модели в миграции, лучше также определить модель * в миграции *. Это поможет, если позже вы решите изменить или даже удалить модель - копия в процессе миграции все равно будет работать. Но если вы можете - используйте seeds.rb. – Arsen7

+0

Проверьте оригинал seed_fu. Я предпочитаю его гораздо больше регулярным семенам или светильникам. Кроме того, он может работать в вашем рабочем процессе для ваших тестовых прогонов. У меня есть сценарий, который будет воссоздавать БД и seed_fu, прежде чем я запустил все свои тесты регрессии. –

0

Хорошо, мы выяснили, что были некоторые проблемы с проверкой. Итак, вы хотели бы, чтобы вы могли пропустить валидации:

default_car = Car.new({:name => 'default_car'}) 
default_car.save(false) 
#=> true 
Смежные вопросы