2017-02-27 1 views
0

新しい列 'piece_id'を追加したいのですが、バケット表に追加しました。私は長い時間前に書いたマイグレーションの影響でエラーが発生しました

class AddPieceIdToBuckets < ActiveRecord::Migration 
    def change 
    add_column :buckets, :piece_id, :string 
    end 
end 


class Bucket < ActiveRecord::Base 
    validates :piece_id, presence: true 
end 

また、私はpiece_idを検証する必要があります。しかし、検証を追加すると、次のエラーが表示されます。私は検証なしで移行を実行しようとしました。

undefined method `piece_id' 

私は昔に書いたマイグレーションでpiece_idは持っていませんが、モデルの書き込み検証に影響があると思います。以前に書いた移行用のオブジェクトをいくつか作成しました。私はそれを編集する必要がありますか?私はこの何倍に刺されてい

def change 
     Bucket.reset_column_information 
     Bucket.create(
       name: 'test_name', 
       about: 'test', 
     ) 
    end 
+0

'piece_id'カラムはテーブルにありますか? – Nithin

答えて

0

、私はもはやこのような理由のための私のマイグレーションで、モデルを経て、任意のデータ変更を入れていません。

バケットを作成した古い移行が既に実行されていることがわかっているので、そのビットを削除したり、属性にpiece_idを追加して空の状態から移行するときに渡す値データベース。

require_relative "seeds/#{Rails.env}/all" 

とのようなディレクトリ構造:development/all.rb

 
db/seeds/development/all.rb 
db/seeds/production/all.rb 

を私はrequire_relative '../production/all'を行う

私は今db/seeds.rbに私が持っている、データを作成するためにrake db:seedsを使用しています。

私はrake db:seedを展開の一部として実行しますが、これはうまくいきます。種が冪等であることを確認してください。レコードが既に存在しないことを確認するか、find_or_create_byなどのアクティブレコードメソッドを使用してください。

関連する問題