2011-04-01 21 views
0

私はレール3を使用しています。マイグレーション内のレールのルールであるかどうかわかりません。データベーステーブルにデータを挿入できないようです。誰かがそれを確認できる場合はそうです。移行中にデータをデータベースに挿入できませんか?

私は、次のことを試してみました:

私は2つの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

少しデバッグ: '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 gemをチェックしてください。私は普通の種子や備品よりもはるかに好きです。さらに、テスト実行のためのワークフローにも対応できます。私はすべての回帰テストを実行する前に、DBとseed_fuを再作成するスクリプトを用意しています。 –

0

わかりました。確認のためにいくつかの問題がありました。今、あなたは妥当性検査をスキップすることができます:

default_car = Car.new({:name => 'default_car'}) 
default_car.save(false) 
#=> true 
関連する問題