Làm cách nào để có đường dẫn thư mục gốc của ứng dụng Rails?
Làm cách nào để có đường dẫn thư mục gốc của ứng dụng Rails?
Câu trả lời:
Trong Rails 3 và mới hơn:
Rails.root
trong đó trả về một Pathname
đối tượng. Nếu bạn muốn một chuỗi bạn phải thêm .to_s
. Nếu bạn muốn một đường dẫn khác trong ứng dụng Rails, bạn có thể sử dụng join
như thế này:
Rails.root.join('app', 'assets', 'images', 'logo.png')
Trong Rails 2, bạn có thể sử dụng RAILS_ROOT
hằng số, đó là một chuỗi.
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Để siêu chính xác, bạn nên sử dụng:
Rails.root.join('foo','bar')
sẽ cho phép ứng dụng của bạn hoạt động trên các nền tảng /
không phải là trình phân tách thư mục, bất kỳ ai cũng nên thử và chạy nó trên một nền tảng .
Rails.root.join('foo','bar')
đánh giá đối tượng Pathname có @path là '/ Users / Purplejquet / my_rails_app / foo / bar'
Bạn có thể truy cập đường dẫn ứng dụng rails bằng cách sử dụng biến RAILS_ROOT
.
Ví dụ:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Ngoài tất cả các câu trả lời đúng khác, vì Rails.root
là một Pathname
đối tượng, điều này sẽ không hoạt động:
Rails.root + '/app/assets/...'
Bạn có thể sử dụng một cái gì đó như join
Rails.root.join('app', 'assets')
Nếu bạn muốn một chuỗi sử dụng này:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
không hoạt động, nhưng yeah join
là gọn gàng hơn.
Trong một số trường hợp, bạn có thể muốn root Rails mà không phải tải Rails.
Ví dụ: bạn nhận được chu kỳ phản hồi nhanh hơn khi các mô hình TDD không phụ thuộc vào Rails bằng cách yêu cầu spec_helper
thay vì 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
Cho phép bạn dễ dàng tải Plain Old Ruby Object từ các tệp spec của chúng.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Bạn có thể dùng:
Rails.root
Nhưng để tham gia các tài sản bạn có thể sử dụng:
Rails.root.join(*%w( app assets))
Hy vọng điều này sẽ giúp bạn.