0

だから私はコントローラー内からジェネレーターを実行しようとしています。Railsアプリケーション内からスキャフォールドを生成できるという考えです。

テスト目的で、iveは実際のコンテンツのないイニシャライザーを作成する小さなジェネレーターを作成しました。私はこれをシェル内から実行しました(railsは初期化子を生成します)

lib/generators/initializer_generator.rb
    class InitializerGenerator < Rails::Generators::Base
      def create_initializer_file
        create_file "config/initializers/initializer.rb", "# Add initialization content here"
      end
    end

しかし、コントローラーからジェネレーターを実行しようとすると問題が発生します

class GeneratorController < ApplicationController
  include Rails::Generators
  include Rails::Generators::Actions

  def index
    generate(:initializer)
  end

end

だからこれは応答をもたらす'未定義のメソッド`behavior'それから私はレールジェネレータがThorに基づいていることを知っていくつかの調査を行い、behaviorメソッドがThor::Actionsモジュール http://rubydoc.info/githubのthorメソッドであることを発見しました/ wycats / thor / master / Thor / Actions:behavior

そこで、そのモジュールを含めるようにコントローラーコードを変更しました。

class GeneratorController < ApplicationController
    include Rails::Generators
    include Rails::Generators::Actions
    include Thor::Actions

  def index
    generate(:initializer)
  end

end

ここで、エラーは「引数の数が間違っています(0の場合は3)」です。何がうまくいかないのか、今は非常に混乱しています。

4

1 に答える 1

0

クラスを直接呼び出してみましたか?

InitializerGenerator.new.initializer

これは Rake に対する Thor の利点です。これらは通常の Ruby クラスです。

メソッド内に destination_root を設定する必要がありました。例:

  def create_initializer_file
    destination_root = Rails.root
    create_file "config/initializers/initializer.rb", "# Add initialization content here"
  end

ジェネレーターを使い始めたばかりなので、もっと良い方法があるかもしれません。

この後、まだ解決していない問題の 1 つに遭遇しました。それは、ファイルが既に存在する場合、Thor がユーザー入力を求めるプロンプトを表示することです。

于 2011-10-07T09:52:35.440 に答える