所以我正在尝试从控制器中运行生成器这个想法是我可以从 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会提示用户输入。