未定义方法的待定迁移错误 - Rails 4

时间:2016-02-19 10:41:26

标签: ruby-on-rails ruby ruby-on-rails-3

我正在修复我在将数据库表中的列类型从整数命名为datetime时所犯的错误。但是,在编写以下内容后运行rake db:migrate之后,我收到了一个挂起的迁移错误。当我通过rails g MigrateDeliveryTimeDates添加新迁移时,db / migrate下没有生成新文件,所以我手动创建了它。错误如下:

An error has occurred, this and all later migrations canceled:
undefined method `deliverytime_temp'

这是我的db / migrate文件:

class ChangeColumnDeliveryTime < ActiveRecord::Migration
  def change
    rename_column(:deliveries, :deliverytime, :deliverytime_temp)
    add_column(:deliveries, :deliverytime, :datetime)  
  end
end

这是我添加的迁移(rails g migration ChangeColumnDeliveryTime):

class ChangeColumnDeliveryTime < ActiveRecord::Migration
   def change
   change_column(:deliveries, :deliverytime, :datetime)
  end
end

这是我的数据库架构:

ActiveRecord::Schema.define(version: 20160216220012) do

  create_table "deliveries", force: :cascade do |t|
    t.string   "name"
    t.string   "deliveryaddress"
    t.integer  "deliverytime"
    t.string   "notes"
    t.integer  "order_id"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
  end

  add_index "deliveries", ["order_id"], name: "index_deliveries_on_order_id"

  create_table "orders", force: :cascade do |t|
   t.datetime "date"
   t.string   "name"
   t.string   "pickup"
   t.datetime "pickuptime"
   t.datetime "created_at", null: false
   t.datetime "updated_at", null: false
  end
end

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

您需要使用 change_column 方法代替 add_column

def change
  # rename_column :table_name, :old_column_name, :new_column_name
  rename_column :deliveries, :deliverytime, :deliverytime_temp
  change_column :deliveries, :deliverytime_temp, :datetime
  # change_column :table_name, :column_name, :new_data_type
end