当我需要在rails中的表中使用新字段时,我该怎么办?

时间:2013-02-05 15:57:47

标签: ruby-on-rails field

我是铁杆新手;我的问题是: 我有一个供用户使用的表,我需要添加更多字段......

我把它放在哪里? 我试图将它放在迁移文件中,但是当我运行rake db:migrate时,架构不会改变。

这是我的迁移文件:

def self.up
 create_table :users do |t|
  t.string :username,         :null => false  # if you use another field as a username, for example email, you can safely remove this field.
  t.string :email,            :default => nil # if you use this field as a username, you might want to make it :null => false.
  t.string :crypted_password, :default => nil
  t.string :salt,             :default => nil
  t.string :nombres,          :default => nil
  t.string :apellidos,        :default => nil
  t.string :codigo,           :default => nil
  t.string :fecha,            :default => nil
  t.string :zona,             :default => nil
  t.string :institucion,      :default => nil
  t.string :frecuencia,       :default => nil
  t.string :pregunta,         :default => nil
  t.string :respuesta,        :default => nil



  t.timestamps
  end

架构仍然没有新字段

create_table "users", :force => true do |t|
t.string   "username",                     :null => false
t.string   "email"
t.string   "crypted_password"
t.string   "salt"
t.string   "nombres"
t.string   "apellidos"
t.string   "codigo"
t.string   "fecha"
t.string   "zona"
t.string   "institucion"
t.string   "frecuencia"
t.datetime "created_at",                   :null => false
t.datetime "updated_at",                   :null => false
t.string   "remember_me_token"
t.datetime "remember_me_token_expires_at"
end

我该怎么办?

2 个答案:

答案 0 :(得分:2)

简单迁移

您可以使用迁移生成器:
$> rails g migration add_position_to_users position:integer
然后运行
$> rake db:migrate

更复杂的迁移

或更复杂的迁移,rails还提供:
$> rails g migration add_body_and_pid_to_users body:string:index pid:integer:uniq:index
$> rake db:migrate

有关迁移的更多信息,请参阅railsguides http://guides.rubyonrails.org/migrations.html

答案 1 :(得分:1)

我认为我们在这里没有提到的是将代码添加到迁移文件中。

我添加列的步骤如下:

# rails generate migration AddFieldName blah:string

在生成的迁移文件中:

(顺便说一句,这通常看起来像:db / migrations / 20130330115915_add_field_name.rb)

class AddFieldName < ActiveRecord::Migration
    def change
        add_column :table_name, :blah, :string
    end
end

进行此更改后,我然后运行db:migrate。然后,该列将添加到数据库中。