是否有一种简单的方法来运行单个迁移?我不想迁移到某个版本,我只想运行一个特定的版本。
当前回答
如果你在路径上有问题,你可以使用
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
其他回答
这是再次运行迁移文件“20150927161307_create_users.rb”的步骤
运行控制台模式。(rails c) 将该文件中的类复制到控制台。 类CreateUsers < ActiveRecord::Migration def变化 Create_table:users do |t| t.string:名字 t.string:电子邮件 T.timestamps null: false结束 结束 结束 结束 创建CreateUsers类的实例:c1 = CreateUsers.new 执行该实例的方法更改:c1.change
你可以直接从ruby文件中运行代码:
rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.new.up
注意:非常老版本的rails可能需要addfoo。up而不是addfoo .new.up。
另一种方法(没有IRB)依赖于require返回类名数组的事实:
script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
注意,如果这样做,就不会更新schema_migrations表,但这似乎正是您想要的结果。
此外,如果无法找到文件,您可能需要使用require("./db/…"或根据您的工作目录尝试require_relative
看起来至少在最新的Rails发行版(撰写本文时为5.2)中还有一种过滤正在运行的迁移的方法。可以在SCOPE环境变量中传递一个过滤器,然后使用该过滤器选择迁移文件。
假设您有两个迁移文件1_add_foos。Rb和2_add_fos .run_this_one. Rb运行
SCOPE=run_this_one rails db:migrate:up
将只选择并运行2_add_fos .run_this_one.rb。请记住,将运行与范围匹配的所有迁移文件。
如果你已经实现了这样一个change方法:
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
你可以创建一个迁移实例,并在实例上运行migrate(:up)或migrate(:down),如下所示:
$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)
如果你在路径上有问题,你可以使用
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
推荐文章
- 使用Django South进行向后迁移
- 如何记录Ruby代码?
- Ruby:包含的反义词是什么?Ruby数组?
- 想要在Rails中找到没有关联记录的记录
- helper和helper_method做什么?
- 如何回滚只是一个步骤使用耙db:迁移
- 在Ruby中,proc和lambda有什么区别?
- 如何传递参数到一个Rake任务与环境在Rails?
- 获取当前正在执行的方法的名称
- 如何在Rails中计算相对时间?
- 如何在Rails迁移中将可空列更改为不可空列?
- 在Ruby中使用范围填充数组的正确方法
- “for”和“each”在Ruby中
- Ruby on Rails -从CSV文件导入数据
- 我如何复制一个哈希在Ruby?