1

Rails 3.2ジェネレーターを作成していて、アプリケーションテンプレートの公式RailsガイドにあるようなThor :: Shell :: Basicインスタンスメソッド(例askまたはyes?)を使用したいと思います。

module MyNamespace
  class ScaffoldGenerator < Rails::Generators::Base
    source_root File.expand_path('../templates', __FILE__)

    if yes? "Install MyGem?"
      gem 'my_gem'
    end

    run 'bundle install'
  end
end

これは私にNoMethodError: undefined method 'yes?' for MyNamespace::ScaffoldGenerator:Class

これらのインスタンスメソッドを利用可能にするクリーンな方法を理解できません-私はすでにから継承していRails::Generators::Baseます。

編集:

ああ、それはおそらくトールとは何の関係もありません...私は警告を受けます:

[WARNING] Could not load generator "generators/my_namespace/scaffold/scaffold_generator"

ジェネレーターを生成するためにジェネレーターを使用しましたが、何かが正しく設定されていません...

4

1 に答える 1

2

ああ、そうです、それはトールと何かをしなければなりません.

警告に惑わされないようにしてください。Rails::Generators が Thor を使用していることはご存知でしょう。Thor Wikiにアクセスして、Thor タスクがどのように機能するかを確認してください。

Rails ジェネレーターを実行すると、ジェネレーター内の任意のメソッドが呼び出されます。そのため、必ずメソッドに整理してください。

module MyNamespace
  class ScaffoldGenerator < Rails::Generators::Base
    source_root File.expand_path('../templates', __FILE__)

    def install_my_gem
      if yes? "Install MyGem?"
        gem 'my_gem'
      end
    end

    def bundle
      run 'bundle install'
    end
  end
end

ジェネレーターを正しいフォルダー構造に配置してくださいlib/generators/my_namespace/scaffold_generator.rb

質問してくれてありがとう、おい!

于 2012-12-09T20:41:18.687 に答える