Nic*_*ick 0 ruby ruby-on-rails rubymine ruby-on-rails-3
我正在开发一个基本上通过表单与db表交互的Web应用程序.最近我不得不进行一些更改,这导致我在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
Run Code Online (Sandbox Code Playgroud)
我还在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
Run Code Online (Sandbox Code Playgroud)
并且也在迁移内部如此:
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
Run Code Online (Sandbox Code Playgroud)
问题是当我运行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)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
您应该知道的是,删除已添加到模型app/models/Student.rb和db/schema.rb的所有更改
然后你应该去你的终端/控制台并输入
$ rails g migration add_column_name_to_student column_name:type
Run Code Online (Sandbox Code Playgroud)
此命令将在db/migrate /文件夹中创建新文件.
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
使用rake db:migrate更新数据库模式后.如果要按表单设置此值,请转到app/models/Student.rb并将新column_name添加到attr_accessible.
整个过程与您的IDE无关.
以下是一些其他资源,您可以从中获取有关如何向模型添加新列的信息.
生成自动添加更改 Rails的Rails迁移3:如何将新字段添加到现有数据库表
你绝对应该避免像你那样添加新列.它很混乱,使您的代码难以维护.
| 归档时间: |
|
| 查看次数: |
6729 次 |
| 最近记录: |