从模型生成迁移

时间:2011-10-09 14:18:58

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

我是Ruby on Rails的初学者,并遵循以下文章: - http://guides.rubyonrails.org/migrations.html

如果我需要生成迁移和模型,我可以使用,例如: -

$ rails generate model Product name:string description:text

这将创建: -

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

      t.timestamps
    end
  end
end

然而,如果我有一个更大的模型(具有许多属性)。我不想将所有属性都放在“rails generate”命令中。我可以先对模型进行编码,然后从该模型文件生成迁移吗?

很抱歉问这么愚蠢的问题。我只是想了解。

2 个答案:

答案 0 :(得分:2)

生成命令不是必须做的事情。它只是一个可以帮助您自动完成某项工作的脚本。运行generate命令后,您可以在控制台中看到此命令的作用。它看起来像这样:

    rails generate scaffold User name:string email:string
      invoke active_record
      create
      db/migrate/20100615004000_create_users.rb
    create
      app/models/user.rb
      invoke
      test_unit
      create
      test/unit/user_test.rb
      create
      test/fixtures/users.yml
      route resources :users
      invoke scaffold_controller
      create
      app/controllers/users_controller.rb
      invoke
      erb
      create
      app/views/users
      create
      app/views/users/index.html.erb
      create
      app/views/users/edit.html.erb
      create
      app/views/users/show.html.erb
      create
      app/views/users/new.html.erb
      create
      app/views/users/_form.html.erb
      invoke
      test_unit
      create
      test/functional/users_controller_test.rb
      invoke
      helper
      create
      app/helpers/users_helper.rb
      invoke
      test_unit
      create
      test/unit/helpers/users_helper_test.rb
      invoke stylesheets
      converted by Web2PDFConvert.com
      create
      public/stylesheets/scaffold.css

您可以实际创建/修改所有文件。但使用generate的好处是它会自动调用所有必需的插件等来生成所有必需的文件。 这就是为什么即使对于非常复杂的模型,控制器等也建议使用generate命令。 因此,在您的情况下,我建议将建筑模型分成几个步骤。它可能是这样的:

rails generate model Product name:string description:text
rails generate migration AddPriceToProducts price:integer
rails generate migration AddDiscountToProducts discount:integer
and so on

如果您犯了一些错误并且它可以帮助您不受伤害,您可以回滚的每一步 你的数据库。

答案 1 :(得分:1)

您可以手动编写迁移代码。模型的属性直接从数据库中读取...因此,如果您将t.string :name添加到迁移文件,然后运行rake db:migrate,则该列将添加到表中,从而使其可用作属于你的模型。