2009-03-11 11 views

Respuesta

8

Gracias por las respuestas. Mike Woodhouse, estabas tan cerca. Resulta que todo lo que tiene que hacer para acceder a la nombreaplic desde el interior de su plantilla de rieles es ...

@root.split('/').last 

La variable @root es lo primero que se crea cuando la inicialización de las plantillas y está disponible dentro de las plantillas de los carriles. RAILS_ROOT no funciona.

1

RAILS_ROOT le dará la ruta absoluta a su directorio raíz. El nombre de su aplicación será la parte de la cadena después del '/' final que puede tomar de muchas maneras.

EDITAR: No es suficiente para hacer el trabajo. Mike y Dan lo arreglan a continuación.

3

Probablemente hay una manera más sencilla, pero esto parece que funciona:

RAILS_ROOT.split('/').last 

EDIT: Bleah - esto que votó en contra de una vez, y el votante tenía razón. Si hubiera leído la pregunta con más cuidado, habría notado los elementos 2.3 y template.rb. Disculpas

Sospecho que RAILS_ROOT no se habrá creado en el momento en que necesite el nombre de la aplicación. En cuanto a ruby\lib\ruby\gems\1.8\gems\rails-2.2.2\bin\rails, sin embargo, casi la primera cosa que sucede es lo siguiente:

app_path = ARGV.first 

Se usa al final de la secuencia de comandos para permitir que un chdir y congelar para hacerse si es necesario - No sabía que podía INSTA - congelarme en la creación, así que aprendí algo nuevo al menos. ARGV continuación, se acostumbra aquí:

Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app') 

que rápidamente nos lleva al lugar donde ARGV es realmente maneja:

rails-2.3.1\lib\rails_generator\scripts.rb 

donde veo

Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke! 

En algún lugar por debajo de aquí es, probablemente, donde el la plantilla se maneja. Me temo que estoy en una etapa muy temprana con 2.3 y la creación de plantillas es un área que aún no he estudiado.

¿Eso ayuda mucho mejor que mi primer esfuerzo?

0

Creo que la forma preferida ahora es llamar a Rails.root y ya no RAILS_ROOT. Al parecer, alguien en los raíles del planeta tiene una aversión a la mayúscula o alguna razón importante similar. Desde 2.3.5 ambos parecen funcionar.

15

Estaba buscando una respuesta a esta pregunta. desafortunadamente, la respuesta anterior (@root) no parece funcionar en Rails 3.

He aquí las variables se puede acceder en Rails 3 plantillas de aplicaciones (incluso más fácil):

@app_name 
@app_path 
0

que estaba recibiendo el error

`template': undefined local variable or method `app_name' 

rubí 1.9.2p290, rieles 3.2.11, thor 0.18.0, Windows

pero con carriles de 2,3 generador:

class DynanavGenerator < Rails::Generators::Base 

(puedo 's asegúrese de que este error ocurrió en los carriles 3.0.9 o anterior) definición de clase cambiada para ser:

class DynanavGenerator < Rails::Generators::NamedBase 

que luego dio:

Ningún valor previsto argumentos necesarios 'nombre'

Luego añade un 'nombre' ("algo" más adelante):

rails generate dynanav something --force 

que dio el error original, entonces agregué:

def app_name 
    @name.titleize 
end 

a la clase y todo estaba bien.

3

me encontré con un problema similar, ninguna de las variables mencionadas anteriormente estaban disponibles para mí en los carriles 4. He descubierto que @name estaba disponible mientras se ejecuta

rails plugin new engines/dummy -m my_template.rb 

Hay otras variables útiles disponibles desde dentro de la plantilla . Puede verlo usted mismo y jugar usando pry. Dentro de mi plantilla añadí

require 'pry'; binding.pry 

y luego corrió ls para mostrar una lista de las variables de instancia disponibles

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 
+0

Esta respuesta es tiempo de la prueba, debe ser el de arriba –

Cuestiones relacionadas