Bagaimana cara mendapatkan jalur direktori root aplikasi Rails saya?
Bagaimana cara mendapatkan jalur direktori root aplikasi Rails saya?
Jawaban:
Di Rails 3 dan yang lebih baru:
Rails.root
yang mengembalikan Pathname
objek. Jika Anda ingin string, Anda harus menambahkan .to_s
. Jika Anda ingin jalur lain di aplikasi Rails Anda, Anda dapat menggunakan join
seperti ini:
Rails.root.join('app', 'assets', 'images', 'logo.png')
Di Rails 2 Anda dapat menggunakan RAILS_ROOT
konstanta, yang merupakan string.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Untuk ketepatan super, Anda harus menggunakan:
Rails.root.join('foo','bar')
yang akan memungkinkan aplikasi Anda untuk bekerja pada platform /
yang bukan pemisah direktori, harus ada yang mencoba dan menjalankannya pada satu.
Rails.root.join('foo','bar')
mengevaluasi ke objek Pathname yang @path adalah '/ Users / purplejacket / my_rails_app / foo / bar'
Anda dapat mengakses jalur aplikasi rel menggunakan variabel RAILS_ROOT
.
Sebagai contoh:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Selain semua jawaban yang benar lainnya, karena Rails.root
merupakan Pathname
objek, ini tidak akan berfungsi:
Rails.root + '/app/assets/...'
Anda bisa menggunakan sesuatu seperti join
Rails.root.join('app', 'assets')
Jika Anda ingin string gunakan ini:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
tidak bekerja, tapi ya join
ini lebih rapi.
Dalam beberapa kasus, Anda mungkin menginginkan root Rails tanpa harus memuat Rails.
Misalnya, Anda mendapatkan siklus umpan balik yang lebih cepat ketika model TDD yang tidak bergantung pada Rails dengan meminta spec_helper
alih - alih 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
Yang memungkinkan Anda untuk dengan mudah memuat Obyek Ruby Lama Biasa dari file spesifikasi mereka.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Kamu bisa memakai:
Rails.root
Tetapi untuk bergabung dengan aset Anda dapat menggunakan:
Rails.root.join(*%w( app assets))
Semoga ini bisa membantu Anda.