迁移后重新加载rails环境

时间:2016-12-09 17:55:10

标签: ruby-on-rails ruby migration reload

我有一些定义模型的数据迁移。例如:

<group android:checkableBehavior="single"> <item android:id="@+id/mybooks" android:title="My Books" /> <item android:id="@+id/myInfo" android:title="Info" /> <item android:id="@+id/myfriends" android:title="My Friends" /> <item android:id="@+id/myQuiz" android:title="Game" /> <item android:id="@+id/myHobby" android:title="Hobbies" /> </group>

db/migrate/19600000000000_some_migration.rb

当我在迁移后立即运行种子时

class Step < ActiveRecord::Base
end

class SomeMigration < ActiveRecord::Migration
  def change
    # operations requiring the Step class
  end
end

重新定义的rake db:migrate db:seed 类仍在内存中。但我需要最初在Step中定义的Step类,因为我的种子依赖于那里的方法,否则它会无声地失败。

我可以想到一些事情,但它们都不理想:

    播种前
  1. app/models/step.rb
    • 这对我来说并不适用,因为它依赖于另一个在迁移过程中重新定义的模型,这可能会变成兔子洞。
  2. require 'app/models/step.rb'
    • 我也不喜欢这个,因为它正在重新定义常量
  3. 始终分别运行Dir["#{File.dirname(__FILE__)}/app/models/**/*.rb"].each { |f| load(f) }rake db:migrate
  4. 我试图寻找在播种后重新加载整个环境的方法,但它们似乎都不起作用:

    • rake db:seed
    • ActionDispatch::Reloader.cleanup!

    对最具扩展性的方法有什么想法?

1 个答案:

答案 0 :(得分:1)

试试这个

class SomeMigration < ActiveRecord::Migration
  class Step < ActiveRecord::Base
  end

  def change
    # operations requiring the Step class
  end
end