W Rails 3, to, co chcesz zrobić, jest możliwe, ale w hacky sposób. Oto jak:
Po dokonaniu rails generate
połączenia, CALLPATH wygląda następująco:
ciągu rails/commands kod, który działa dla generowania:
ARGV << '--help' if ARGV.empty?
aliases = {
"g" => "generate",
"c" => "console",
"s" => "server",
"db" => "dbconsole"
}
command = ARGV.shift # <= #1
command = aliases[command] || command
case command
when 'generate', 'destroy', 'plugin', 'benchmarker', 'profiler'
require APP_PATH
Rails.application.require_environment! # <= #2
require "rails/commands/#{command}" # <= #3
Punkty zainteresowania są ponumerowane powyżej. Mianowicie, że w punkcie #1
uruchomione polecenie przesuwa się z ARGV
. Co w twoim przypadku oznacza, że generate
zostanie usunięte z argumentów linii poleceń.
W punkcie #2
środowisko zostanie załadowane, w którym to momencie inicjatory zostaną wykonane. I tutaj jest trudna część - ponieważ w tym momencie nie załadowano niczego, co wskazywało na konkretne polecenie (zdarza się to pod #3
), nie ma informacji pozwalającej na określenie generatora uruchamianego!
Niech wstawić skrypt do config/initializer/debug.rb
aby zobaczyć, co jest dostępne, jeśli wpadliśmy rails generate model meep
:
puts $0 #=> "script/rails"
puts ARGV #=> ["model", "meep"]
Jak widać, nie ma bezpośredniego informacja, że generator jest uruchomiony. To powiedziawszy, istnieją pośrednie informacje. Mianowicie ARGV[0] #=> "model"
. Niewykluczone, że można utworzyć listę możliwych generatorów i sprawdzić, czy ten generator został wywołany na ARGV[0]
. Odpowiedzialny programista twierdzi, że jest to hack i może pękać w sposób, jakiego się nie spodziewałeś, więc użyłbym tego ostrożnie.
Jedyną opcją jest modyfikacja script/rails
zgodnie z sugestią użytkownika - co nie jest zbyt dobrym rozwiązaniem, ale najprawdopodobniej zostanie przerwane po uaktualnieniu do Rails 4.
W Szyny 4, masz więcej nadziei! Do czasu application environment is being loaded, przestrzeń nazw generatorów została już załadowana. Oznacza to, że w inicjalizatorze można wykonać następujące czynności:
if defined? Rails::Generators #=> "constant"
# code to run if generators loaded
else
# code to run if generators not loaded
end