我正在编写Rails 3.2生成器,并希望使用Thor::Shell::Basic实例方法(例如ask
或yes?
),就像它们在official Rails guides on Application Templates中一样。
module MyNamespace
class ScaffoldGenerator < Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)
if yes? "Install MyGem?"
gem 'my_gem'
end
run 'bundle install'
end
end
这会给我一个NoMethodError: undefined method 'yes?' for MyNamespace::ScaffoldGenerator:Class
。
我无法弄清楚如何使这些实例方法可用 - 我已经从Rails::Generators::Base
继承。
编辑:
啊,它可能与Thor无关......我收到警告:
[WARNING] Could not load generator "generators/my_namespace/scaffold/scaffold_generator"
虽然我使用生成器来生成生成器但是没有正确设置...
答案 0 :(得分:2)
哦,是的,它必须与Thor做点什么。
不要让自己因警告而感到困惑。你知道Rails :: Generators使用Thor,所以请转到the Thor Wiki并查看how Thor tasks work。
rails生成器执行将调用生成器中的任何方法。因此,请确保将您的内容组织成方法:
module MyNamespace
class ScaffoldGenerator < Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)
def install_my_gem
if yes? "Install MyGem?"
gem 'my_gem'
end
end
def bundle
run 'bundle install'
end
end
end
务必将您的发电机放入正确的文件夹结构,例如lib/generators/my_namespace/scaffold_generator.rb
。
感谢您提出问题,伙计!