Rails 3在启动时加载所有模型

我有一个类方法混合到我的所有模型中。 在计算模型类时调用该方法。 不幸的是(对我而言),无论何时需要开发环境中的模型,这似乎都是按需的。 如何在启动时加载所有型号的导轨? 这是否可取?

class Foo < ActiveRecord::Base include Acl register_acl # i need this to be called for all models at start up end 

基本上,register_acl采用模型希望访问控制的“动作”的一些参数。 假设Foo的一个动作是“管理”,系统需要在启动时意识到这个动作。 我认为在模型中是拥有这种逻辑的最自然的地方。

谢谢!

在整个应用程序范围内执行此操作的正确方法是在配置中启用cache_classes 。 默认情况下,它处于开发阶段,但在生产阶段。

如果你想偶尔这样做:

 Rails.application.eager_load! 

我不知道这是否理想,但它对我有用。 在config / initialize /的某处,我这样做:

 Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| require_dependency file } 

并预加载我的模型

在MVC中,概念模型并不打算单独行动,即它们只应在控制器向它们发送消息时起作用(例如,@ foo.register_acl)。 模型实例甚至不应该存在,直到它们由控制器创建。

你想用register_acl方法实现什么目标?

如果您确实需要在对象创建时执行某些操作,则可以使用initialize()方法,该方法在创建Ruby对象时调用。

但是,如果您需要模型来执行某些代码本身,您很可能面临一些代码异味,并且您需要在应用程序中更改某些内容。