Rails生成迁移不起作用

8
我在控制台中执行了下述命令:
rails g migration payslips first_name:string last_name:string

但是这只会生成像下面这样的空文件。
class Payslips < ActiveRecord::Migration
  def change
  end
end

我不知道原因。控制台生成命令有问题吗?

你为什么认为生成器有问题而不是你提供给生成器的输入有问题?你是想向表中添加列还是创建一个新表?无论哪种方式,你都必须明确你要做什么。请查看 Rails 指南 http://guides.rubyonrails.org/migrations.html#creating-a-migration - j03w
“migration generator” 不会创建带有列添加的迁移文件,而只是一个空文件。我已经有了 Payslip 模型,所以我只需要创建一个新的迁移文件。 - Passionate Engineer
尝试使用 rails g migration AddFirstNameAndLastNameToPayslips first_name:string last_name:string 命令。Rails 无法通过仅告诉它表名来猜测您要做什么。请阅读文档 - j03w
4个回答

6

如果您想创建一个模型,那么正确的功能是需要运行以下命令:

rails g model payslips first_name:string last_name:string

然后您会得到:
class CreatePayslips < ActiveRecord::Migration
  def change
    create_table :payslips do |t|
      t.string :first_name
      t.string :last_name

      t.timestamps
    end
  end
end

4

在你的表名前使用单词Create

$ rails generate migration CreateProducts name:string part_number:string

生成:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.string :part_number
    end
  end
end

来源:http://guides.rubyonrails.org/migrations.html

Rails迁移是一种方便的方式来修改数据库模式。它使用Ruby代码来添加,删除或修改表格或列,而不必手动编写SQL语句。
迁移文件是一个版本控制系统中的Ruby文件,在执行时将相应更改应用于数据库模式。每个迁移文件都包含了对相应更改的详细说明和回滚操作。
可以使用命令行工具`rails generate migration`创建新的迁移文件,并使用`rake db:migrate`执行所有未应用的迁移。要撤消最后一次迁移,请使用`rake db:rollback`。

这为我生成了一个空迁移。Rails 3.2.2,Ruby 2.1.5p273。 - frediy
1
对我也一样:```class CreateProducts < ActiveRecord::Migration def up end def down end end ``` - Jan

2

假设您已经创建了您的模型,当您解释您真正想要做什么时,您必须更加明确:

rails g migration add_first_name_and_last_name_to_payslips first_name:string last_name:string

以上内容告诉迁移器将first_name和last_name添加到payslips表中,因此您最终会得到这个迁移:
class AddFirstNameAndLastNameToPayslips < ActiveRecord::Migration
  def change
    add_column :payslips, :first_name, :string
    add_column :payslips, :last_name, :string
  end
end

0

你可以单独生成迁移来修改表格。但是要创建新的表格,你必须生成模型,这样它将为相应的模型生成创建表格的迁移(就像 @efrenfuentes 说的那样)。

或者你可以尝试使用一个名为 migration_for 的插件来完成你想做的事情。

rails plugin install git://github.com/capotej/migration_for.git

rails g migration_for create_table:payslips add_column:payslips:first_name:string add_column:payslips:last_name:string


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接