rake db:migrate遇到未定义方法的错误

时间:2017-10-30 17:42:04

标签: ruby postgresql rake database-migration

我接手了一个由其他人建造的网站。我现在正试图在localhost上运行它。但是,当我迁移时,看起来像以前的开发人员将代码放入可能依赖于已存在的种子的迁移中。迁移文件如下所示。

def up
  add_column :supplies, :color, :string

  Supply.where(:title => "Shipped").first.update(:color =>'#e20ce8')
end

def down
  remove_column :supplies, :color
end

运行rake db:migrate时我得到的错误是...

rake aborted!
StandardError: An error has occurred, this and all later migrations 
canceled:

undefined method `update' for nil:NilClass

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

可能发生的情况是先前的可能是种子supply模型的迁移未运行或表被截断。作为一种良好的做法,我们不应该使用迁移来生成数据,而只是使用迁移来构建模式。

您有两个选择:

如何在迁移中提取此代码和其他播种器并将其放入seeds.rb并运行rake db:seed

#in seeds.rb
Supply.where(:title => "Shipped").first.update(:color =>'#e20ce8')

或者,

在更新迁移之前检查。

instance = Supply.where(:title => "Shipped").first
instance.update(color: '#e20ce8') if instance.present?

答案 1 :(得分:2)

rake db:schema:load怎么样?我相信这会让你继续前进,然后让你继续使用rake db:migrate