我接手了一个由其他人建造的网站。我现在正试图在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
我该怎么做才能解决这个问题?
答案 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
。