我正在运行rails迁移,对于所有记录,我想设置新列的值'结果'基于现有列的值 - '得分'。
class AddResultToReports < ActiveRecord::Migration
def change
add_column :reports, :result, :integer
Report.all.each do |r|
r.update_attribute(:result, 0) if (r.score < 40)
r.update_attribute(:result, 1) if (r.score >= 40)
end
add_index :reports, :result
end
end
但是当我键入&#39; bin / rake db:migrate&#39;我收到以下错误:
耙子流产了! StandardError:发生错误,此以及所有后续迁移都已取消: 未定义的方法`&lt;&#39;为零:NilClass
请帮忙,我该怎么写有条件的&#39; if&#39;在铁路迁移?
答案 0 :(得分:0)
score
字段为nil
。 Ruby无法比较nil。
如果score
为nil
,那么result
将为0
class AddResultToReports < ActiveRecord::Migration
def change
add_column :reports, :result, :integer
add_index :reports, :result
Report.find_each do |r|
if r.score.nil? || r.score < 40
r.update_attribute(:result, 0)
else
r.update_attribute(:result, 1)
end
end
end
end