2011-09-15 4 views
0

:environmentのようなレイクタスクはどこに定義されていますか? :environmentより軽いものがありますが、これはRakeタスクからActiveRecordサブクラスにアクセスできますか?Rakeを使用して子孫のリストを見つけることができません

私はRakeタスクでモデルのリストを取得しようとしています。これは私が持っているものです:私は定義された3つのモデルを持っているものの

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 

はしかし、私が今まで取得すべては、[]です。

編集:私はRails 3.1を使用しています。

答えて

1

これを達成するために想像できる最も軽い方法は、すべての.rbファイルを現在のディレクトリとプロジェクト内のサブディレクトリ(すべてが奇妙な場所に格納されている場合)で繰り返し実行するレーキタスクを作成することです。単に文字列< ActiveRecord::Baseを含むファイルの数を出力します(スペースはオプションです)。

これに一致する一つの正規表現パターンは次のとおりです。

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

...ので、それだけで、それはですので、すなわち(ハッシュ#マークで始まらない明示的なクラス宣言を含める行を、一致しました

+0

本当に、それは速い結果のアプローチですが、 ' Geo

+0

さて、しかし、あなたはちょっとパターンを洗練して、ActiveRecord :: Baseがハッシュマーク(コメントを示す)の後ろにある行と一致しないようにする必要があります。正規表現は簡単にこの問題を解決するのに十分強力で、 'ActiveRecord'とその依存関係が得られるように環境を下ろそうとするよりもはるかに高速になるでしょう。 – jefflunt

関連する問題