Rails 4:将列添加到现有脚手架

Syl*_*lar 2 ruby ruby-on-rails-4

是的,这个问题充斥在这里,但大多数是几年前我正在使用Rails 4.我已经尝试了几个,它搞砸了我的rails应用程序,所以我不会再采取任何机会.

我已经创建了一个带有字段的脚手架,我对其模型,控制器和视图进行了很多更改.想象一下,几个星期之后,当你创建了一个脚手架后,他们正在为某人工作,他们意识到他们错过了一个重要的专栏 - 大声笑

rails g scaffold Book a:string b:integer
Run Code Online (Sandbox Code Playgroud)

我该如何轻松添加c:date?

很少有例子显示正在运行迁移,很少有人说要编辑rails控制台.我很困惑rails g migration add_this_to_that c:data?

任何与您的答案的参考都非常感谢,因为我还在学习RoR.

Rus*_*nov 6

要添加新列,您应该创建迁移:

rails g migration add_c_to_books c:date
Run Code Online (Sandbox Code Playgroud)

(注意语法:add_x_to_y),它将此文件添加到db/migrate/timestamp _add_c_to_books.rb:

class AddCToBooks < ActiveRecord::Migration
  def change
    add_column :books, :c, :date
  end
end
Run Code Online (Sandbox Code Playgroud)

现在您只需要运行它:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

而已.


您可以添加多个列:

rails g migration add_c_d_e_to_books c:date d:string e:integer
Run Code Online (Sandbox Code Playgroud)

这将创建以下迁移:

class AddCDEToBooks < ActiveRecord::Migration
  def change
    add_column :books, :c, :date
    add_column :books, :d, :string
    add_column :books, :e, :integer
  end
end
Run Code Online (Sandbox Code Playgroud)

或者根据需要命名:

rails g migration my_migration
Run Code Online (Sandbox Code Playgroud)

这将导致干净的迁移:

class MyMigration < ActiveRecord::Migration
  def change
  end
end
Run Code Online (Sandbox Code Playgroud)

你可以自由地在里面指定你的指令def change.