답변:
Rails 3 이상에서 :
Rails.root
Pathname
객체 를 반환 합니다. 문자열을 원하면 추가해야합니다 .to_s
. Rails 앱에서 다른 경로를 원하면 join
다음과 같이 사용할 수 있습니다 .
Rails.root.join('app', 'assets', 'images', 'logo.png')
Rails 2에서는 RAILS_ROOT
상수 인 문자열을 사용할 수 있습니다 .
Rails.root.join(*%w( app assets images logo.png ))
.
Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
정확성을 높이려면 다음을 사용해야합니다.
Rails.root.join('foo','bar')
/
디렉토리 분리기가 아닌 플랫폼에서 앱을 작동시킬 수 있습니다 .
Rails.root.join('foo','bar')
평가하여 그 @Path이다 '/ 사용자 / purplejacket / my_rails_app / foo는 / 바'경로 이름 객체
variable을 사용하여 rails 앱 경로에 액세스 할 수 있습니다 RAILS_ROOT
.
예를 들면 다음과 같습니다.
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
다른 모든 정답뿐만 아니라, 이후는 Rails.root
A는 Pathname
목적이하지 않습니다 일 :
Rails.root + '/app/assets/...'
당신은 같은 것을 사용할 수 있습니다 join
Rails.root.join('app', 'assets')
문자열을 원하면 다음을 사용하십시오.
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
않는 일을하지만, 그래 join
깔끔한입니다.
경우에 따라 Rails를로드하지 않고 Rails 루트를 원할 수도 있습니다.
예를 들어 Rails에 의존하지 않는 모델을 TDD 할 때 spec_helper
대신 에 요구함으로써 피드백주기가 더 빨라집니다 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
스펙 파일에서 Plain Old Ruby Objects를 쉽게로드 할 수 있습니다.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...