2010-09-16 42 views

Respuesta

467

en Rails 3 y más reciente:

Rails.root 

que devuelve un objeto Pathname. Si desea una cadena, debe agregar .to_s. Si quieres otro camino en su aplicación Rails, puede utilizar join así:

Rails.root.join('app', 'assets', 'images', 'logo.png') 

En Rails 2 se puede utilizar la constante RAILS_ROOT, que es una cadena.

+2

En Rails 2.3 Rails.root es una instancia de Pathname donde RAILS_ROOT es una cadena. – Richard

+1

Solo Rails.root en 3.1 y posteriores (ahh ... el caso de cambiar CONSTANT;)) – thanikkal

+1

También puede 'Rails.root.join (*% w (app assets images logo.png))'. – Nate

21

Puede acceder a la ruta de acceso de la aplicación usando la variable RAILS_ROOT.

Por ejemplo:

render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb" 
+0

RAILS_ROOT se depra como Rails 3.0 insted use Rails.root –

96

para Super corrección, se debe utilizar:

Rails.root.join('foo','bar') 

que permita que su aplicación para trabajar en plataformas donde / no es el separador de directorios, alguien debería tratar de ejecutarlo en uno.

+1

Por ejemplo, en mi MacBook , 'Rails.root.join ('foo', 'bar')' evalúa el objeto Pathname cuyo @path es '/ Users/purplejacket/my_rails_app/foo/bar' – Purplejacket

12

Además de todas las otras respuestas correctas, ya que es un objeto Rails.rootPathname, esto no funcionará:

Rails.root + '/app/assets/...' 

Usted podría utilizar algo como join

Rails.root.join('app', 'assets') 

Si desea una cadena use esto:

Rails.root.join('app', 'assets').to_s 
+1

En realidad 'Rails.root + 'app/assets' * does * work, pero sí 'join' es más nítido. – Mischa

+1

Por lo general, no es una buena idea codificar por hardware el token separador de archivos (\ o /). –

0

Puede usar:

Rails.root 

Sin embargo, para unirse a los activos que se pueden utilizar:

Rails.root.join(*%w(app assets)) 

Esperemos que esto le ayuda.

2

En algunos casos es posible que desee la raíz de Rails sin tener que cargar Rails.

Por ejemplo, obtiene un ciclo de retroalimentación más rápido cuando los modelos TDD que no dependen de los rieles requieren spec_helper en lugar de rails_helper.

# spec/spec_helper.rb 

require 'pathname' 

rails_root = Pathname.new('..').expand_path(File.dirname(__FILE__)) 

[ 
    rails_root.join('app', 'models'), 
    # Add your decorators, services, etc. 
].each do |path| 
    $LOAD_PATH.unshift path.to_s 
end 

Que le permite cargar fácilmente Viejos Objetos de Ruby Viejos de sus archivos de especificaciones.

# spec/models/poro_spec.rb 

require 'spec_helper' 

require 'poro' 

RSpec.describe ... 
-1

Simplemente por Rails.root o si desea agregar algo que podemos utilizarlo como Rails.root.join ('app', 'activos'). To_s

+0

Elimine esta respuesta, es solo ruido, no agrega nada a la pregunta. – luk2302

-1

simplemente escribiendo Rails.root y anexar cualquier cosa por Rails.root.join (*% w (recursos de la aplicación)).to_s

+0

Elimine esta respuesta, es solo ruido, no agrega nada a la pregunta y está mal formateado. – luk2302

Cuestiones relacionadas