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 Pathnameobjek. Jika Anda ingin string, Anda harus menambahkan .to_s. Jika Anda ingin jalur lain di aplikasi Rails Anda, Anda dapat menggunakan joinseperti ini:
Rails.root.join('app', 'assets', 'images', 'logo.png')
Di Rails 2 Anda dapat menggunakan RAILS_ROOTkonstanta, 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.rootmerupakan Pathnameobjek, 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 joinini 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_helperalih - 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.