如何让Rails 3在开发模式下重新加载STI类?

时间:2011-01-05 22:02:58

标签: ruby-on-rails ruby single-table-inheritance

切换到Rails 3后,我注意到我必须重新启动服务器才能使每个请求重新加载STI模型类。例如,假设我有这个:

# app/models/vehicle.rb
class Vehicle < ActiveRecord::Base
end

# app/models/car.rb
class Car < Vehicle
end

如果我对Vehicle进行了更改,则会在下一个请求中加载更改。但是如果我对Car进行了更改,我必须重新启动服务器才能加载它。

有关解决这个问题的任何想法吗?

我正在运行WEBrick,但我没有承诺。

3 个答案:

答案 0 :(得分:2)

我们发现我们需要zetetic的解决方案和一些额外的代码来完成这项工作(至少在Rails 3.0.9中)。对于上述问题,解决方案看起来像:

在config / environments / development.rb中:

  config.after_initialize do
    ["vehicle"].each do|dep|
      require_dependency( (Rails.root + "app/models/#{dep}").to_s )
    end
  end

在app / controllers / application_controller.rb中:

class ApplicationController < ActionController::Base
  if Rails.env == 'development'
    require_dependency( (Rails.root + "app/models/vehicle").to_s )
  end
...

development.rb中的代码处理类的初始加载,ApplicationController中的代码处理后续请求。

答案 1 :(得分:1)

我相信这可以通过在控制器中添加require_dependency 'vehicle'来解决。

答案 2 :(得分:0)

使用rails 3.0.3和3号乘客,我根本看不到这一点。如果将您的应用更新到3.0.3无法修复它,我将离开WEBrick。

我个人建议使用WEBrick以外的东西。乘客一直是我开发+生产的首选服务器。