Techioz Blog

デフォルトの Rails ジェネレーターがカスタム ジェネレーターを呼び出すようにする

概要

明確にしておきますが、これは私がやろうとしていることではありません。

私がやりたいのは、次を呼び出したときにジェネレーターが自動的に呼び出されるようにすることです。

rails generate scaffold User name age:integer

テストの置き換えなどを書いているわけではなく、完全にカスタムです。ジェネレーターに関して私が見つけた情報はすべて、最初の 2 つのケースのいずれかに関係していますが、私がやりたいことは含まれていません。 hook_for を見つけたとき、まさに私が必要としていたものだとすぐに思いましたが、どうやらその逆で、カスタム ジェネレーター内から別の Rails ジェネレーターを呼び出します (カスタム ジェネレーター用にテスト ファイルを作成したい場合は、次のようにします)。 hook_for :test_framework を呼び出してから、どこかに TestUnit::MyCustomGenerator クラスを定義します)。

デフォルトの足場ジェネレーターをモンキーパッチして自分のものと呼ぶこともできると思いますが、それは汚い気がします。 https://github.com/Skalar/i18n-yaml-generator のような同様のことを行ういくつかの gem を調べましたが、初期化子と lib/generators を使用するように変換しようとしても機能しません。 scaffold_generator は実行されますが、私のものは呼び出されません。

解決策

私にとっては lib/generators/ から動作します

$ rails g generator scaffold
      create  lib/generators/scaffold
      create  lib/generators/scaffold/scaffold_generator.rb
      create  lib/generators/scaffold/USAGE
      create  lib/generators/scaffold/templates
$ rails g scaffold
Usage:
  rails generate scaffold NAME [options]
....
        what/will/it/create

http://guides.rubyonrails.org/generators.html#generators-lookup

別の方法かもしれません:)

また、「完全にカスタム」であれば、別の名前を付けるのが当然ですよね?