Jak uzyskać ścieżkę do katalogu głównego aplikacji Rails?
Jak uzyskać ścieżkę do katalogu głównego aplikacji Rails?
Odpowiedzi:
W Rails 3 i nowszych:
Rails.root
który zwraca Pathname
obiekt. Jeśli chcesz ciąg, musisz go dodać .to_s
. Jeśli chcesz mieć inną ścieżkę w aplikacji Rails, możesz użyć join
tego w następujący sposób:
Rails.root.join('app', 'assets', 'images', 'logo.png')
W Railsach 2 możesz użyć RAILS_ROOT
stałej, która jest łańcuchem.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Aby uzyskać super poprawność, należy użyć:
Rails.root.join('foo','bar')
co pozwoli twojej aplikacji działać na platformach, na których /
nie ma separatora katalogów, jeśli ktoś spróbuje uruchomić ją na jednym.
Rails.root.join('foo','bar')
ocenia obiekt Pathname, którego @ ścieżka to „/ Users / purplejacket / my_rails_app / foo / bar”
Możesz uzyskać dostęp do ścieżki aplikacji Railsowej za pomocą zmiennej RAILS_ROOT
.
Na przykład:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Oprócz wszystkich innych poprawnych odpowiedzi, ponieważ Rails.root
jest to Pathname
obiekt, to nie zadziała:
Rails.root + '/app/assets/...'
Możesz użyć czegoś takiego join
Rails.root.join('app', 'assets')
Jeśli chcesz ciąg, użyj tego:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
to działa, ale tak join
jest fajniej.
W niektórych przypadkach możesz chcieć rootować Railsy bez konieczności ładowania Railsów.
Na przykład, otrzymujesz szybszy cykl sprzężenia zwrotnego, gdy modele TDD, które nie zależą od Railsów, spec_helper
zamiast tego wymagają 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
Co pozwala łatwo załadować zwykłe stare obiekty Ruby z ich plików specyfikacji.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Możesz użyć:
Rails.root
Aby jednak dołączyć do zasobów, możesz użyć:
Rails.root.join(*%w( app assets))
Mam nadzieję, że to ci pomoże.