由于我很久以前写过的迁移的影响,我收到了一个错误

时间:2017-02-27 10:28:12

标签: ruby-on-rails ruby

我想添加新列' piece_id'然后我把它添加到Bucket表中。

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

1 个答案:

答案 0 :(得分:0)

我被这次多次咬过,因为这个原因,我不再通过模型对我的迁移进行任何数据更改。

由于您可以确信创建Bucket的旧迁移已经运行,您可以删除该位代码,或者更好地将piece_id添加到属性并为其赋予值,以便在迁移时通过来自一个空数据库。

我现在使用rake db:seeds创建数据,db/seeds.rb我有:

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

和目录结构,如:

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

development/all.rb我做require_relative '../production/all'

我作为部署的一部分运行rake db:seed,这很有效,只需确保种子是幂等的,因此请检查记录是否已存在,或使用find_or_create_by等活动记录方法。 / p>