2010-09-16 6 views

Antwort

467

In Rails 3 und höher:

Rails.root 

die eine Pathname Objekt zurückgibt. Wenn Sie eine Zeichenfolge möchten, müssen Sie .to_s hinzufügen. Wenn Sie einen anderen Pfad in Ihrer Rails-Anwendung möchten, können Sie join wie folgt verwenden:

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

In Rails 2 Sie die RAILS_ROOT Konstante verwenden, die eine Zeichenfolge ist.

+2

In Rails 2.3 Rails.root ist eine Instanz von Pathname, wobei RAILS_ROOT eine Zeichenfolge ist. – Richard

+1

Nur Rails.root in 3.1 und später (ahh .. der Fall der Änderung CONSTANT;)) – thanikkal

+1

Sie können auch 'Rails.root.join (*% w (app Vermögenswerte Bilder logo.png))'. – Nate

21

Sie können mit der Variablen RAILS_ROOT auf den App-Pfad der Schiene zugreifen.

Zum Beispiel:

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

RAILS_ROOT ist deprated seit Rails 3.0 verwendet Rails.root –

96

Für Super Korrektheit, sollten Sie verwenden:

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

, die Ihre Anwendung ermöglicht auf Plattformen zu arbeiten, wo / nicht das Verzeichnis Separator ist, sollte jemand versuchen, führe es auf einen.

+1

Zum Beispiel auf meinem MacBook , 'Rails.root.join ('foo', 'bar')' ergibt ein Pfadname-Objekt, dessen @path '/ Users/purplejacket/my_rails_app/foo/bar' ist – Purplejacket

12

Neben allen anderen richtigen Antworten, da Rails.root ein Pathname Objekt ist, wird dies nicht funktionieren:

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

Sie so etwas wie join

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

verwenden könnte Wenn Sie ein möchten Zeichenfolge verwenden Sie diese:

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

Eigentlich 'Rails.root + 'app/assets' * funktioniert *, aber ja 'Join' ist ordentlicher. – Mischa

+1

Es ist normalerweise keine gute Idee, das Dateitrennzeichen (/ oder /) zu codieren. –

0

Sie können Verwendung:

Rails.root 

Aber um das Vermögen zu verbinden Sie verwenden können:

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

Hoffentlich Ihnen hilft.

2

In einigen Fällen möchten Sie vielleicht den Rails-Root, ohne dass Sie Rails laden müssen.

Zum Beispiel erhalten Sie einen schnelleren Rückkopplungszyklus, wenn TDD'ing-Modelle, die nicht von Rails abhängig sind, spec_helper anstelle von rails_helper benötigen.

Das ermöglicht Ihnen einfaches Laden einfacher Ruby-Objekte aus ihren Spezifikationsdateien.

# spec/models/poro_spec.rb 

require 'spec_helper' 

require 'poro' 

RSpec.describe ... 
-1

einfach durch Rails.root oder wenn Sie etwas anhängen wollen, können wir es wie Rails.root.join verwenden ('App', 'Assets'). To_s

+0

Bitte löschen Sie diese Antwort, es ist nur Rauschen, fügt nichts zur Frage hinzu. – luk2302

-1

einfach durch das Schreiben Rails.root und fügen Sie alles durch Rails.root.join (*% w (App Assets)).to_s

+0

Bitte löschen Sie diese Antwort, es ist nur Rauschen, fügt nichts zu der Frage hinzu und es ist schlecht formatiert. – luk2302