запуск конструктора из контроллера - PullRequest
0 голосов
/ 19 мая 2011

Итак, я пытаюсь запустить генератор из контроллера, идея в том, что я могу создать скаффолд из приложения rails

для целей тестирования, я создал небольшой генератор, который создает инициализатор безреальный контент.я запустил это изнутри оболочки (rails generate initializer)

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

, так что это приноситответ «неопределенный метод« поведение », тогда я провел некоторое исследование, зная, что генераторы рельсов основаны на Торе, и обнаружил, что метод поведения является методом Тор в модулях Thor :: Actions http://rubydoc.info/github/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

Теперь ошибка - «неверное количество аргументов (3 для 0)».Я очень смущен тем, что может пойти не так.

1 Ответ

0 голосов
/ 07 октября 2011

Вы пытались позвонить в класс напрямую?

InitializerGenerator.new.initializer

Это преимущество Тора перед Рейком, это обычные классы Ruby.

Я должен был установить destination_root внутри моего метода, пример:

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

Я только начал использовать генераторы, так что может быть лучше.

Одна проблема, с которой я столкнулся после этого, которую мне еще предстоит решить, заключается в том, что Тор запрашивает ввод данных пользователем, если файл уже существует.

...