0

所以我试图从控制器中运行生成器,我的想法是我可以从 Rails 应用程序中生成脚手架

出于测试目的,我创建了一个小型生成器,它创建了一个没有实际内容的初始化程序。我已经从 shell 中运行了它(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

所以这带来了响应'未定义的方法'行为'然后我做了一些研究,知道rails生成器是基于托尔的,发现行为方法是托尔::动作模块中的雷神方法 http://rubydoc.info/github /wycats/thor/master/Thor/Actions:行为

所以我更改了控制器代码以包含该模块:

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

这是 Thor 相对于 Rake 的一个优势,这些是常规的 Ruby 类。

我必须在我的方法中设置destination_root,例如:

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

我才刚刚开始使用生成器,所以可能有更好的方法。

在此之后我遇到的一个问题是,如果文件已经存在,Thor 会提示用户输入,但我还没有解决这个问题。

于 2011-10-07T09:52:35.440 回答