我想添加新列' 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
答案 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>