找不到带有'id'的表= Rails 4.2.6中的所有迁移错误

时间:2016-06-30 10:16:11

标签: ruby-on-rails rails-migrations

运行rake db:migrate:

时出现以下错误

StandardError:发生错误,此操作和所有后​​续迁移都已取消:

无法找到带有'id'的报告=所有[WHERE“报告”。“deleted_at”IS NULL]

这是我的2个迁移文件:

Class AddColorToReports < ActiveRecord::Migration
  def self.up
    add_column :reports, :button_color, :string

    Report.find(:all).each do |r|
      r.update_attribute(:color, r.top_stroke_color)
    end
  end

  def self.down
    remove_column :reports, :button_color
  end
end


class AddDeletedAtToReport < ActiveRecord::Migration
  def change
    add_column :reports, :deleted_at, :datetime
  end
end

运行Rail 3.2和4.0时迁移很好,但是在4.2.6中没有工作。

请告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

查看版本&gt;的方法find的文档。 4.0:

  

按ID查找 - 这可以是特定的id(1),id列表(1,   5,6),或一组id([5,6,10])。如果找不到记录   所有列出的ID,然后RecordNotFound将被提升。如果   主键是一个整数,通过id查找使用它来强制其参数   to_i。

for version&lt; 4.0:

  

使用四种不同的检索方法进行查找:

  • 按ID查找 - 这可以是特定的id(1),id列表(1, 5,6),或一组id([5,6,10])。如果找不到记录 所有列出的ID,然后将引发RecordNotFound。
  • 首先查找 - 这将返回与选项匹配的第一条记录 用过的。这些选项可以是特定条件,也可以只是一个 订购。如果没有匹配的记录,则返回nil。使用 Model.find(:first,* args)或其快捷键Model.first(* args)。
  • 查找最后 - 这将返回与选项匹配的最后一条记录 用过的。这些选项可以是特定条件,也可以只是一个 订购。如果没有匹配的记录,则返回nil。使用 Model.find(:last,* args)或其快捷键Model.last(* args)。
  • 查找全部 - 这将返回选项匹配的所有记录 用过的。如果未找到任何记录,则返回空数组。使用 Model.find(:all,* args)或其快捷键Model.all(* args)。