向模型添加新列

时间:2014-03-21 05:39:46

标签: ruby-on-rails ruby

尝试添加first_name& last_name到现有模型用户

首先这样做了:

rails g migration first_name_to_users first_name:string

然后做了这个:

rails g migration last_name_to_users last_name:string

显然跑rake db:migrate导致了这个:

  

== FirstNameToUsers:迁移========================================== =====   == FirstNameToUsers:迁移(0.0000s)======================================

     

== LastNameToUsers:迁移========================================== ======   == LastNameToUsers:已迁移(0.0000s)=======================================

但它没有出现在表格中!

如果我进入rails控制台并运行User.column_names,我就明白了:

=> ["id", "email", "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", "created_at", "updated_at"] 

如果有人询问它是否显示在db / migrate文件夹中,答案是肯定的。

这是last_name:

class LastNameToUsers < ActiveRecord::Migration
    def change
    end
end

那么......为什么它没有出现在桌面上?

4 个答案:

答案 0 :(得分:3)

在一个迁移文件中执行此操作,

rails g migration add_columns_to_users

然后在使用上述命令生成的迁移文件中执行以下操作: -

class AddColumnsToUsers < ActiveRecord::Migration
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
  end
end

答案 1 :(得分:3)

首先,使用console命令生成迁移的主要原因是获取时间戳,您可以随意更改生成的迁移。比如在变更函数中添加一行

  def change
    add_column :user, :first_name, :string
  end

其次如果您希望通过console命令自动生成它,则需要使用add_column作为前缀,例如

rails g migration add_column_first_name_to_user first_name:string

请记住,并非所有迁移都可以(或应该)由控制台命令自动生成,尤其是复杂的迁移,您可以完全执行

rails g migration my_awesome_100_line_change_to_model_xyz

并在空生成的方法中继续编辑,只需要自己了解上下阶段这个案例

答案 2 :(得分:2)

你这样做错了。

语法应为

rails g migration add_column_first_name_to_users first_name:string

rails g migration add_column_last_name_to_users last_name:string

或只是

rails g migration add_first_name_to_users first_name:string
rails g migration add_last_name_to_users last_name:string

最好的方法是在单个命令中生成它们( @RSB 表示)。

答案 3 :(得分:0)

很抱歉迟到了,但我不确定为什么没有人提到这些其他方式:

rails g migration add_column_first_name_and_last_name_to_user first_name:string last_name:string

或:

rails g migration add_column_first_name_and_last_name_to_users first_name:string last_name:string

或:

rails g migration add_first_name_and_last_name_to_user first_name:string last_name:string

或:

rails g migration add_first_name_and_last_name_to_users first_name:string last_name:string

将生成:

class AddFirstNameAndLastNameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
  end
end

您错过了将add_附加到第一个参数的命令中。当然,类名AddFirstNameAndLastNameToUsers将根据您传递给rails g migration命令的第一个参数而改变。