【问题标题】:Getting build task error while running rake db:migrate in rails 3运行 rake db 时出现构建任务错误:rails 3 中的迁移
【发布时间】:2015-07-12 16:35:01
【问题描述】:

运行命令时出现以下错误

rake db:migrate VERSION=201504******.

错误:

耙子中止!
不知道如何构建任务'20150419131135'

实际上我已经有一个迁移文件。现在我正在连接到一个新数据库。我想在该数据库中创建表。请检查我的以下文件。

20150419131135_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def self.up
    if !table_exists? :users
      create_table :users do |t|
        t.string :contact_name
        t.string :login_id
        t.string :password_hash
        t.string :password_salt
        t.string :phone
        t.string :address
        t.timestamps
      end
    end
  end
end


class CreateUsers < ActiveRecord::Migration
  def self.down
    drop_table :users if !table_exists?(:users)
  end
end

迁移后出现上述错误。请帮我解决此错误。

【问题讨论】:

  • 如果你只做rake db:migrate(无版本)会怎样

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


【解决方案1】:

self.downself.up 方法应在一个 CreateUsers class 内:

class CreateUsers < ActiveRecord::Migration
  def self.up
      create_table :users do |t|
        t.string :contact_name
        t.string :login_id
        t.string :password_hash
        t.string :password_salt
        t.string :phone
        t.string :address
        t.timestamps
      end unless table_exists? :users
    end
  end

  def self.down
    drop_table :users if table_exists? :users
  end
end

【讨论】:

  • 不应该只是上下(instsnce方法)
  • @jphager2:在 Rails 2.3 的文档迁移中,使用 self 编写,因为 3.2 没有编写。
  • 好的。问题指定了 Rails 3,所以也许这就是问题所在?
  • @jphager2:不,问题在于拆分方法,正如我在答案中所述。 self.up 似乎是 up 的旧版本,但它仍然按预期工作。
  • 好的。所以它奏效了。不知道为什么将方法分成两个类定义应该是一个问题。我真的希望活动记录不会对 ruby​​ 文件进行任何额外的解析......
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 2012-06-16
  • 2012-12-09
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多