Еще одна возможность - использовать что-то вроде
invoke 'active_record:model', 'foo bar:string baz:float'
, которое не так чисто, как generate
, но имеет одно преимущество: когда ваш генератор вызывается через rails destroy
, этот вызов можетдругие действия Thors - попытка отменить действие генератора, которого вы invoke
.
Однако есть одна загвоздка: вероятно, из-за управления зависимостями Thors, это работает только один раз для каждого генератора, который вы хотите вызвать, то естьчто второй invoke
того же генератора ничего не сделает.Это можно обойти, используя вместо этого оператор типа
Rails::Generators.invoke 'active_record:model', '...', behavior: behavior
.В этом случае вы должны явно пройти через behavior
вашего генератора (это метод, возвращающий значения типа :invoke
, :revoke
и, возможно, другие, в зависимости от того, какая команда - rails generate
, rails destroy
, rails update
и т. Д. - называется вашим генератором) для достижения того же результата, что и выше.Если вы этого не сделаете, генератор, который вы вызываете с помощью Rails::Generators.invoke
, также будет выполняться при запуске вашего генератора с rails destroy
.
В качестве альтернативы вы можете придерживаться invoke
и попытаться вмешаться в вызов Thorsсистема.См. Также здесь , например.