我有一个须要一个:email
列的Users模型(我忘记在初始支架中添加该列)。 html
我打开了迁移文件,并添加了t.string :email
,作了rake db:migrate
,获得了NoMethodError
。 而后我添加了线 数据库
add_column :users, :email, :string
再次rake db:migrate
,再次rake db:migrate
NoMethodError
。 我在这里错过了一步吗? ruby
编辑:这是迁移文件。 架构
class CreateUsers < ActiveRecord::Migration def self.up add_column :users, :email, :string create_table :users do |t| t.string :username t.string :email t.string :crypted_password t.string :password_salt t.string :persistence_token t.timestamps end end def self.down drop_table :users end end
你也能够 ide
rake db:rollback
若是还没有向表中添加任何数据。而后经过向其添加电子邮件列来编辑迁移文件,而后调用 ui
rake db:migrate
若是您的系统中已安装Rails 3.1及更高版本,则此方法将起做用。 spa
更简单的方法是更改,让迁移文件中的更改保持原样。 采用 code
$rake db:migrate:redo
这将回滚上一次迁移并再次迁移。 htm
在Rails控制台上使用此命令 token
rails generate migration add_fieldname_to_tablename fieldname:string
和
rake db:migrate
运行此迁移
要添加列,我只须要遵循如下步骤:
rails generate migration add_fieldname_to_tablename fieldname:string
另类
rails generate migration addFieldnameToTablename
生成迁移后,请编辑迁移并定义要添加该列的全部属性。
注意 :Rails中的表名称始终是复数形式(以匹配数据库约定)。 使用前面提到的步骤之一的示例-
rails generate migration addEmailToUsers
rake db:migrate
要么
db/schema.rb
更改架构,在SQL查询中添加所需的列。 运行如下命令: rake db:schema:load
警告/注意
请记住,运行rake db:schema:load
自动擦除表中的全部数据。
您能够经过如下方式回滚上一次迁移
rake db:rollback STEP=1
或回滚此特定迁移
rake db:migrate:down VERSION=<YYYYMMDDHHMMSS>
并编辑文件,而后再次运行rake db:mirgate
。
您也能够这样作.. rails g migration add_column_to_users email:string
而后rake db:migrate还要在用户控制器中添加:email属性;
有关更多详细信息,请访问http://guides.rubyonrails.org/active_record_migrations.html