0

我正在开发一个基本上通过表单与数据库表交互的网络应用程序。最近我不得不进行一些更改,导致我在 db 表中添加了另一列。我正在使用 RubyMine 进行开发,但不知道如何更新模型以使其包含新列。我已将其添加到模型中,如下所示:

class Student < ActiveRecord::Base
attr_accessible :f_name, :floor_pref, :l_name, :is_active

validates_presence_of :f_name, :floor_pref, :l_name
end

我还在 schema.rb 中添加了它:

ActiveRecord::Schema.define(:version => 20130620140537) do

create_table "students", :force => true do |t|
t.string   "f_name"
t.string   "l_name"
t.string   "floor_pref"
t.boolean "is_active"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

end

在迁移内部也是这样:

class CreateStudents < ActiveRecord::Migration
def change
create_table :students do |t|
  t.string :f_name
  t.string :l_name
  t.string :floor_pref
  t.boolean :is_active

  t.timestamps
end
end
end

问题是当我运行 rails 控制台并查找我的模型对象时,它没有显示我添加的新列 (:is_active)。它只显示旧列:

>> Student
Loading development environment (Rails 3.2.13)
Switch to inspect mode.
Student(id: integer, f_name: string, l_name: string, floor_pref: string, created_at:    datetime, updated_at: datetime)

我错过了什么?

4

3 回答 3

5

您应该知道的是,删除您添加到模型app/models/Student.rbdb/schema.rb的所有更改

然后你应该去你的终端/控制台并输入

$ rails g migration add_column_name_to_student column_name:type

此命令将在 db/migrate/ 文件夹中创建新文件。

$ rake db:migrate

使用 rake db:migrate 更新数据库模式后。如果您想通过表单设置此值,请转到您的 app/models/Student.rb 并将新的 column_name 添加到attr_accessible中。

整个过程与您的 IDE 无关。

这里有一些其他资源,您可以在其中获取如何向模型添加新列的信息。

生成自动添加更改的 Rails 迁移 Rails 3:如何向现有数据库表添加新字段

您绝对应该避免以您这样做的方式添加新列。它很混乱,使您的代码难以维护。

于 2013-07-18T17:11:13.413 回答
1

这不是向表中添加新列的正确方法。您想打开控制台并运行以下命令,rails g migration add_column_name_to_table column_name:type然后运行 ​​bundle exec rake rake db:migrate。把东西塞进去是不好的。

于 2013-07-18T16:35:41.733 回答
0

例如:如果我想将该postedon列添加到帖子表中,那么:

rails g migration AddPostedOnToPosts  posted_on:date

这将自动在您的迁移文件中添加列。

于 2014-10-04T13:00:50.537 回答