用于路由的Rails常量不会在开发中重新加载

时间:2015-10-13 20:53:52

标签: ruby-on-rails ruby-on-rails-4

我正在经历我认为以前经历过的一个非常常见的问题,尽管这次我似乎无法找到解决方案。

我的路由的定义依赖于Item的子类加载,如图所示(实际路由过于复杂而无法发布):

match ":style/:item_type/search", to: "items#search", constraints: 
  { 
    item_type: Item.searchable
  }

请注意Item不是Rails / AR模型,它只是一个Ruby类。 Item类具有以下两个类方法:

def self.all_types
  return @all_types if @all_types && @all_types.any?

  Dir.glob(File.join(Rails.root, 'app', 'models', 'items', '*.rb')).each do |descendant|
    require descendant
  end
  @all_types = self.descendants
end

def self.searchable
  all_types.select{ |i| i.searchable? }
end

基本上,我们需要每个文件,然后询问一个类方法,如果你可以搜索或不显然返回true或false。

我的问题是即使这个方法失败了,如果我在Dir.glob块下面插入调试器语句并检查self.descendants的值,我会找到一个空数组。

请注意,仅在我编辑任何相关文件并尝试在开发模式下继续使用我的服务器后才会发生。也就是说,如果我编辑item.rb或子类awesome_item.rb,则@all_types数组为空并且我的路由会崩溃。

我希望这是足够的信息。我试过阅读自动加载文档,但要么我不明白它们如何使我受益,或者它不是我正在寻找的解决方案。

0 个答案:

没有答案