Sto scherzando con i modelli di binari 2.3 e voglio essere in grado di usare il nome dell'app come variabile all'interno del mio modello, quindi quando uso ...
rails appname -m path/to/template.rb
... Desidero poter accedere a appname all'interno di template.rb. Qualcuno sa come fare questo?
GrazieAccesso al nome dell'app dall'interno di un modello di rails durante la generazione di app per rotaie
risposta
Grazie per le risposte. Mike Woodhouse, eri così vicino. Risulta, tutto quello che dovete fare per accedere al appname da dentro il modello rotaie è ...
@root.split('/').last
La variabile @root è la prima cosa creata durante l'inizializzazione di modelli ed è disponibile all'interno del vostro rotaie modelli. RAILS_ROOT non funziona.
RAILS_ROOT fornisce il percorso assoluto per la directory principale. Il nome della tua app sarà la parte della stringa dopo l'ultimo '/' che puoi afferrare in vari modi.
EDIT: Non abbastanza per portare a termine il lavoro. Mike e Dan lo stendono sotto.
C'è probabilmente un modo più semplice, ma questo sembra funzionare:
RAILS_ROOT.split('/').last
EDIT: Bleah - questo ha bocciato una volta, e l'elettore era giusto. Se avessi letto la domanda con più attenzione, avrei notato gli elementi 2.3 e template.rb. Scuse.
Sospetto che RAILS_ROOT non sia stato creato nel punto in cui è necessario il nome dell'app. Guardando ruby\lib\ruby\gems\1.8\gems\rails-2.2.2\bin\rails
, tuttavia, quasi la prima cosa che succede è questo:
app_path = ARGV.first
E 'usato alla fine dello script per consentire a un chdir e congelare per essere fatto se necessario - non sapevo che potrei insta -la brezza alla creazione, così ho imparato qualcosa di nuovo almeno. ARGV
poi viene utilizzato qui:
Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app')
che ci porta rapidamente al luogo dove ARGV è realmente gestita:
rails-2.3.1\lib\rails_generator\scripts.rb
dove vedo
Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke!
Da qualche parte in basso qui è probabilmente dove il il modello viene gestito. Temo di essere in una fase molto iniziale con 2.3 e il template è un'area che non ho ancora visto.
Questo aiuta meglio del mio primo tentativo?
Credo che il modo migliore ora sia chiamare Rails.root e non più RAILS_ROOT. Apparentemente qualcuno su un binario del pianeta ha un'avversione verso le maiuscole o qualcosa di simile. A partire dal 2.3.5 entrambi sembrano funzionare.
stavo cercando una risposta a questa domanda. sfortunatamente la risposta sopra (@root) non sembra funzionare in Rails 3.
Ecco le variabili si può accedere in Rails 3 modelli di app (ancora più facile):
@app_name
@app_path
In Rails 3, utilizzare l'attributo app_name
.
Vedere la documentazione per Rails::Generators::AppGenerator.
mi stavo errore
`template': undefined local variable or method `app_name'
rubino 1.9.2p290, Rails 3.2.11, thor 0.18.0, Windows
ma con rotaie 2.3 generatore:
class DynanavGenerator < Rails::Generators::Base
(posso Si assicuri che questo errore si sia verificato sotto rails 3.0.9 o precedente) la definizione di classe modificata sia:
class DynanavGenerator < Rails::Generators::NamedBase
che poi ha dato:
fornito alcun valore per gli argomenti richiesti 'nome'
Ho poi aggiunto un 'nome' ("qualcosa" di seguito):
rails generate dynanav something --force
che ha dato l'errore originale, quindi ho aggiunto:
def app_name
@name.titleize
end
alla classe e tutto andava bene.
mi sono imbattuto in un problema simile, nessuna delle variabili sopra elencate erano disponibili a me in Rails 4. Ho scoperto che @name
era disponibile durante l'esecuzione
rails plugin new engines/dummy -m my_template.rb
Ci sono altre variabili utili disponibili all'interno del modello . Puoi vedere di persona e giocare utilizzando pry
. Dentro il mio modello ho aggiunto
require 'pry'; binding.pry
e poi corse ls
per visualizzare un elenco di variabili di istanza disponibili
ls -i
instance variables:
@_initializer @app_path @behavior @destination_stack @extra_entries @name @output_buffer @shell
@_invocations @args @builder @dummy_path @gem_filter @options @rails_template @source_paths
@after_bundle_callbacks @author @camelized @email @in_group @original_name @shebang
Questa risposta è la prova del tempo, dovrebbe essere quella superiore –