尝试添加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
那么......为什么它没有出现在桌面上?
答案 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
命令的第一个参数而改变。