【问题标题】:I would like to know how can I force a model loading in development environment我想知道如何在开发环境中强制加载模型
【发布时间】:2011-08-14 01:28:56
【问题描述】:

我想知道如何在开发环境中强制加载模型。 (轨道 2.3.10)

当我处于测试或开发模式时,SomeProject 在使用之前永远不会启动。这是控制台的内容:

>   project = Project.find(:some)
    RuntimeError: Can not find 'some'
      from /path/to/rails/lib/identifier.rb:23:in `class_from_key'
      from /path/to/rails/lib/identifier.rb:8:in `find'
      from (irb):4
> Projects::SomeProject
  => Projects::SomeProject 
> project = Project.find(:some)
  => #<Projects::SomeProject:0x10810ceb8 @key="some", @full_name="Some Project"> 

永远不会调用identifier 方法。但是,它在生产模式下以及当我在开发模式下缓存类时确实有效。

config.cache_classes = true

但这只是消除了开发的好处。

关于确保所有子类都自动加载的好方法有什么想法吗?

代码详情

我有一个Project 课程

class Project
  extend Identifier

  def full_name
    @full_name
  end

  def key
    @key
  end

end

这是更具体项目类的基类

class Projects::SomeProject < Project
  identifier :some

  def initialize
    @key = 'some'
    @full_name = "Some Project"
  end
end

项目扩展标识符模块,该模块应自行注册子类并公开find 方法以通过键实例化:

module Identifier

  def find(*args)
    key = args.shift
    klass = class_from_key(key)
    if args.empty?
      klass.new 
    else 
      klass.new args
    end
  end

  private 

  def class_from_key(key)
    raise "Can not find '#{key}'" unless identifiers.has_key?(key)
    identifiers[key] 
  end

  def identifiers
    @@identifiers ||= {}
  end

  def identifier(key)
    identifiers[key] = self
  end

end

【问题讨论】:

    标签: ruby-on-rails class


    【解决方案1】:

    添加可能没有坏处

    require 'some_project'
    

    如果您有此类需求,请在文件顶部。

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多