【问题标题】:ActiveRecord migration not executingActiveRecord 迁移未执行
【发布时间】:2013-11-23 00:35:45
【问题描述】:

我是 Rails 新手,我创建了一个自定义迁移来使用 Rails Generate 更改我的数据库结构。这是我发出的命令:rails g migration users。

现在,在它创建的文件中,我输入了:

class Users < ActiveRecord::Migration
  def change
    add_column :first_name
    add_column :last_name
    remove_column :name
  end
end

当我运行 rake db:migrate 时,没有任何反应。我需要做什么来解决这个问题?

【问题讨论】:

  • 如果您完全自己创建文件,那么我猜您省略了文件名开头的时间戳。 Rails 在数据库的表 (schema_migrations) 中记录了哪些迁移已执行,并使用该时间戳来识别它们。没有那个时间戳 db:migrate 只会跳过迁移。

标签: ruby-on-rails ruby activerecord sqlite


【解决方案1】:

它根本没有运行?根据您提供的信息很难说。也许您应该尝试使用更独特的名称进行迁移?比如:

rails g migration ConvertUsersNamesToSingleField

我不确定有两个同名迁移是否很酷。但是对于像Users 这样的短通用名称,这可能是这里的问题。为了后代和清晰起见,拥有一个冗长且描述性的迁移名称通常不会有什么坏处。

这些问题同意使用非唯一名称的迁移不起作用:Rails migrations with the same name


但即使在运行时,这也会引发错误。您需要在这些列调用中包含表名,并且需要在创建字段时指定类型。

class ConvertUsersNamesToSingleField < ActiveRecord::Migration
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
    remove_column :users, :name
  end
end

【讨论】:

  • 非常感谢!正是我需要的 :) 现在完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2018-11-03
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多