使用Rake找不到后代列表

时间:2011-09-15 16:41:00

标签: ruby-on-rails rake

:environment等Rake任务在哪里定义?是否有比:environment更轻的东西可以让我从Rake任务中访问ActiveRecord子类?

我正在尝试在Rake任务中获取模型列表。这就是我所拥有的:

namespace :mine do
    namespace :ar do
        desc "my custom"
        task :show_sub => [:environment] do
            puts "Total:#{ActiveRecord::Base.descendants}"
            ActiveRecord::Base.descendants.each do |cls|
                puts cls
            end
        end
    end
end

然而,我得到的只是[],虽然我定义了3个模型。

编辑:我正在使用Rails 3.1。

1 个答案:

答案 0 :(得分:1)

我能想象到的最轻量级的方法是编写rake任务,遍历当前目录中的所有.rb文件和项目中的子目录(如果你把它们藏在某个奇怪的地方) ),并简单地输出包含字符串< ActiveRecord::Base的文件数(当然,空格是可选的)。

与此匹配的一个正则表达式模式是:

^class\s[a-zA-Z0-9_]+\s?<\s?ActiveRecord::Base

...所以它只匹配包含显式类声明的行,它不以散列#标记开头(即所以它不是注释)