例如,我有一个帖子的迁移文件:
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.text :text
t.integer :ip
t.timestamps
end
end
end
并希望将其更改为:
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.text :text
t.integer :ip, :limit => 8
t.timestamps
end
end
end
我会添加一行:
change_column :posts, :ip, :limit => 8
以下文件为:
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.text :text
t.integer :ip, :limit => 8
t.timestamps
change_column :posts, :ip, :limit => 8
end
end
end
然后运行heroku run rake --trace db:migrate
我无法理解迁移的工作原理,尤其是生产,因此非常感谢任何帮助。
http://guides.rubyonrails.org/active_record_migrations.html#changing-columns列修饰符的第3.5节,但没有指定如何传递它们。
谢谢!
答案 0 :(得分:1)
您应该创建一个单独的迁移,以便在ip
列上添加限制。
生成迁移:
rails generate migration ChangeIpLimitOnPosts
在生成的迁移文件中,更新内容:
class ChangeIpLimitOnPosts < ActiveRecord::Migration
def up
change_column :posts, :ip, :integer, limit: 8
end
def down
change_column :posts, :ip, :integer
end
end
请注意:您需要在更改列时指定列类型,即使在您的情况下,您也不会更改类型。
此外,在这种情况下,如果您需要回滚,Active Record将不知道如何撤销事务,因此您需要明确告诉Active Record如何执行此操作 - 这可以使用up
和down
方法,而不是change
。
运行迁移:
rake db:migrate
On Heroku:
heroku run rake db:migrate
希望有所帮助。