Wie bekomme ich den Stammverzeichnispfad meiner Rails App?Rails Root-Verzeichnispfad?
Antwort
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.
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"
RAILS_ROOT ist deprated seit Rails 3.0 verwendet Rails.root –
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.
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
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
Eigentlich 'Rails.root + 'app/assets' * funktioniert *, aber ja 'Join' ist ordentlicher. – Mischa
Es ist normalerweise keine gute Idee, das Dateitrennzeichen (/ oder /) zu codieren. –
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.
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 ...
einfach durch Rails.root oder wenn Sie etwas anhängen wollen, können wir es wie Rails.root.join verwenden ('App', 'Assets'). To_s
Bitte löschen Sie diese Antwort, es ist nur Rauschen, fügt nichts zur Frage hinzu. – luk2302
einfach durch das Schreiben Rails.root und fügen Sie alles durch Rails.root.join (*% w (App Assets)).to_s
Bitte löschen Sie diese Antwort, es ist nur Rauschen, fügt nichts zu der Frage hinzu und es ist schlecht formatiert. – luk2302
- 1. Rails + tinymce-rails komischer Fehler
- 2. Rails-Dokumentation von Rails-Konsole
- 3. Langsame Rails-Startzeit verbessern (Rails-Konsole, Rails-Server)
- 4. Ruby on Rails: 4.2.0 Unterschiede zwischen Rails und bin/rails
- 5. In Ruby/Rails, was ist "Rails"?
- 6. von Rails Migration 2 bis Rails 3
- 7. Rails-Projekt mit React Rails-Verzeichnissen?
- 8. Rails 4 Äquivalent von Rails 3 'Model.all'
- 9. Wie starten Sie Rails von Rails neu?
- 10. Upgrade von Rails 3.2 auf Rails 4
- 11. Kontrollkästchen in Rails 1 vs. Rails 2
- 12. Rails API + AngularJS + Websocket-Rails gem
- 13. Rails 3 autoload_paths gegen Rails 2 load_paths
- 14. Rails: Benutzerkonten
- 15. Rails Plugins
- 16. Rails Druckarray
- 17. on Rails
- 18. Rails Migration
- 19. Rails Syntaxfehler
- 20. Rails Migration
- 21. Rails Formularvalidierung
- 22. Rails Duplizierungsansicht
- 23. Rails ActiveResource
- 24. Rails-Währungsformatierung
- 25. Rails Activeverbindungssitzung
- 26. Rails: Autocomplete
- 27. Rails: HasManyThroughAssociationNotFoundError
- 28. Rails CookieOverflow
- 29. Rails-Anwendungseinstellungen?
- 30. Rails Suchmethode
In Rails 2.3 Rails.root ist eine Instanz von Pathname, wobei RAILS_ROOT eine Zeichenfolge ist. – Richard
Nur Rails.root in 3.1 und später (ahh .. der Fall der Änderung CONSTANT;)) – thanikkal
Sie können auch 'Rails.root.join (*% w (app Vermögenswerte Bilder logo.png))'. – Nate