我正在試驗寶石的發展,現在特別是發電機。到目前爲止,我已經成功創建了兩個完美工作的發電機。這兩個生成器位於相同的目錄中。如何讓發電機在軌道上調用其他發電機3
但是,現在我必須分別打電話給他們每個人。
我想要做的只是調用一個生成器,並讓該生成器調用所有其他的生成器。只要鍵入
rails g generator_name
這會調用x個其他發生器。
有誰知道我會怎麼做到這一點?
非常感謝幫助,謝謝!
我正在試驗寶石的發展,現在特別是發電機。到目前爲止,我已經成功創建了兩個完美工作的發電機。這兩個生成器位於相同的目錄中。如何讓發電機在軌道上調用其他發電機3
但是,現在我必須分別打電話給他們每個人。
我想要做的只是調用一個生成器,並讓該生成器調用所有其他的生成器。只要鍵入
rails g generator_name
這會調用x個其他發生器。
有誰知道我會怎麼做到這一點?
非常感謝幫助,謝謝!
在你的生成器,你可以叫
generate "some:generator" # can be anything listed by 'rails g'
例如:
module MyGem
class InstallGenerator < Rails::Generators::Base
def run_other_generators
generate "jquery:install" # or whatever you want here
end
end
end
順便說一句,如果你是on Rails的工作3寶石,這個問題也可以幫到:
看看軌道附帶的腳手架發電機。
/Users/XYZ/sources/rails/railties/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb
def manifest
record do |m|
#....rest of the source is removed for brevity....
m.dependency 'model', [name] + @args, :collision => :skip
end
end
這裏所述支架發生器被使用模型發生器。所以看看依賴方法。你可以通過here找到它的API文檔。
發電機是基於托爾的,所以你可以使用apply method。
這就是Rails Templater gem所做的。 (Here's通過Rails Templater寶石散步。)
另一種可能性是使用類似
invoke 'active_record:model', 'foo bar:string baz:float'
這是不一樣generate
乾淨,但有一個好處:當你的發電機被通過rails destroy
調用,這個調用 - 像其他可能的行動雷神的 - 將嘗試撤銷發電機的動作invoke
。
但是有一個問題:可能是由於托爾斯依賴管理,這隻適用於每個發電機要調用一次,這意味着同一發電機的第二個invoke
什麼也不會做。這可以通過使用類似於
Rails::Generators.invoke 'active_record:model', '...', behavior: behavior
的語句來避開。在這種情況下,您必須明確地通過發電機的behavior
(這是一種返回值如:invoke
,:revoke
和其他可能的值的方法,具體取決於哪個命令 - rails generate
,rails destroy
,rails update
等 - 稱爲您的發電機)到達到與上述相同的結果。如果您不這樣做,當您使用rails destroy
運行發電機時,您使用Rails::Generators.invoke
調用的發電機也將被執行。
或者,您可以堅持invoke
並嘗試篡改Thors調用系統。例如,另請參閱here。
你也可以調用一個生成器來調用,例如調用'cucumber:install'...這樣做的好處是,當你試圖回滾生成器時(使用rails d mygenerator:mytask),它將正確地*撤消*命令。希望是有道理的! – 2012-12-16 22:42:28
'Rails :: Generators.invoke'active_record:model',[「bar」],:migration => false'忽略遷移錯誤標誌或任何選項。深入挖掘它看起來像只是在執行「invoke ...」時調用的invoke方法與Rails :: Generators.invoke不一樣。因此,如果您需要傳遞生成器選項:'Rails :: Generators.invoke'active_record:model',[「bar」,「--no-migration」])' – ErJab 2014-03-26 00:05:01
把params傳入被調用的生成器怎麼樣? – Ziggy 2013-12-02 17:30:56
@ziggy生成'generator','arguments' – efoo 2014-02-11 22:09:36