从控制器中运行构造函数

时间:2011-05-19 16:32:16

标签: ruby-on-rails controller thor rails-generate

所以我试图在控制器内运行一个生成器 我的想法是我可以在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

所以这会带来响应'未定义的方法'行为' 然后我做了一些研究,知道轨道发电机是基于雷神 并发现行为方法是Thor :: Actions模块中的thor方法 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 :(得分:0)

您是否尝试过直接致电该课程?

InitializerGenerator.new.initializer

这是Thor over Rake的优势,这些是常规的Ruby类。

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

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

我刚开始使用发电机,所以可能有更好的方法。

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