Ben*_*Ben 13 ruby gem ruby-on-rails generator
我正在尝试宝石开发,现在专门用于生成器.到目前为止,我已经成功创建了两个完美地完成工作的发生器.这两个生成器位于同一目录中.
但是,现在我必须分别打电话给他们.
我想做的就是调用一台发电机并让发电机调用所有其他发电机.只是打字
rails g generator_name
Run Code Online (Sandbox Code Playgroud)
这将调用x其他生成器.
有谁知道我会怎么做到这一点?
非常感谢帮助,谢谢!
Mik*_*mer 22
在你的发电机里,你可以打电话
generate "some:generator" # can be anything listed by 'rails g'
Run Code Online (Sandbox Code Playgroud)
例如:
module MyGem
class InstallGenerator < Rails::Generators::Base
def run_other_generators
generate "jquery:install" # or whatever you want here
end
end
end
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您正在使用Rails 3宝石,这个问题也可以帮助:
另一种可能性是使用类似的东西
invoke 'active_record:model', 'foo bar:string baz:float'
Run Code Online (Sandbox Code Playgroud)
它不是那么干净generate
,但有一个优点:当你的发电机被通过时rails destroy
,这个电话 - 就像其他Thors行动一样 - 会试图撤销你的发电机的动作invoke
.
但是有一个问题:可能是由于Thors依赖关系管理,这只适用于你想要调用的每个生成器一次,这意味着invoke
同一个生成器的第二个将无能为力.这可以通过使用类似的语句来规避
Rails::Generators.invoke 'active_record:model', '...', behavior: behavior
Run Code Online (Sandbox Code Playgroud)
代替.在这种情况下,你必须明确地通过behavior
您的发电机(这是一个方法,返回值一样:invoke
,:revoke
可能还有其他人,根据其命令- ,,rails generate
等-所谓的发电机)来实现与上述相同的结果.如果不这样做,则在运行发电机时也会执行调用的发电机.rails destroy
rails update
Rails::Generators.invoke
rails destroy
或者你可以坚持invoke
并试图篡改Thors调用系统.另请参见此处.
归档时间: |
|
查看次数: |
3098 次 |
最近记录: |