Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义方法的挂起迁移错误-Rails 4_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 未定义方法的挂起迁移错误-Rails 4

Ruby on rails 未定义方法的挂起迁移错误-Rails 4,ruby-on-rails,ruby,ruby-on-rails-3,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_

我正在修复将数据库表中的列类型从整数命名为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
如何解决此错误?

您需要使用方法来代替

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

当我进行这些建议的更改、保存并运行rake db:migrate时,仍然会出现以下错误:“雷克!StandardError:发生错误,此迁移和所有后续迁移已取消:#@Codestudio:确定的未定义方法'deliverytime_temp',然后将
change\u列:deliveries,:deliverytime,:datetime
放在
rename\u coulmn
之前,同时删除
ChangeColumnDeliveryTime
迁移文件
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
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