Ruby on Rails - 从控制器内部运行构造函数



所以我正在尝试从控制器中运行生成器这个想法是我可以从 Rails 应用程序中生成一个脚手架

出于测试目的,我创建了一个小型生成器,该生成器创建了一个没有实际内容的初始值设定项。 我已经从外壳中运行了它(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 生成器是基于 apon 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)"。我现在对可能出现的问题感到非常困惑。

您是否尝试过直接调用该类?

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会提示用户输入。

最新更新