Come posso ottenere il percorso della directory principale della mia app Rails?
Come posso ottenere il percorso della directory principale della mia app Rails?
Risposte:
In Rails 3 e versioni successive:
Rails.root
che restituisce un Pathnameoggetto. Se vuoi una stringa devi aggiungere .to_s. Se desideri un altro percorso nell'app Rails, puoi utilizzare in joinquesto modo:
Rails.root.join('app', 'assets', 'images', 'logo.png')
In Rails 2 puoi usare la RAILS_ROOTcostante, che è una stringa.
Rails.root.join(*%w( app assets images logo.png )).
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Per una super correttezza, dovresti usare:
Rails.root.join('foo','bar')
che consentirà alla tua app di funzionare su piattaforme in cui /non è presente il separatore di directory, nel caso qualcuno dovesse tentare di eseguirlo su una.
Rails.root.join('foo','bar')restituisce l'oggetto Pathname il cui @path è '/ Users / purplejacket / my_rails_app / foo / bar'
Puoi accedere al percorso dell'app Rails usando la variabile RAILS_ROOT.
Per esempio:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Oltre a tutte le altre risposte corrette, poiché Rails.rootè un Pathnameoggetto, questo non funzionerà:
Rails.root + '/app/assets/...'
Potresti usare qualcosa del genere join
Rails.root.join('app', 'assets')
Se vuoi una stringa usa questo:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets' fa il lavoro, ma sì joinè più ordinato.
In alcuni casi potresti volere il root di Rails senza dover caricare Rails.
Ad esempio, si ottiene un ciclo di feedback più rapido quando si utilizzano modelli TDD che non dipendono da Rails richiedendo spec_helperinvece di 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
Ciò consente di caricare facilmente Plain Old Ruby Objects dai loro file di specifiche.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Puoi usare:
Rails.root
Ma per unire le risorse è possibile utilizzare:
Rails.root.join(*%w( app assets))
Spero che questo ti aiuti.