所以我试图在控制器内运行一个生成器 我的想法是我可以在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)'。现在我很困惑可能出现的问题。
答案 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还是会提示用户输入。