레일스 루트 디렉토리 경로?


답변:


545

Rails 3 이상에서 :

Rails.root

Pathname객체 를 반환 합니다. 문자열을 원하면 추가해야합니다 .to_s. Rails 앱에서 다른 경로를 원하면 join다음과 같이 사용할 수 있습니다 .

Rails.root.join('app', 'assets', 'images', 'logo.png')

Rails 2에서는 RAILS_ROOT상수 인 문자열을 사용할 수 있습니다 .


2
Rails 2.3에서 Rails.root는 RAILS_ROOT가 문자열 인 Pathname의 인스턴스입니다.
Richard

1
3.1 이상에서 Rails.root 만 사용 (ahh .. CONSTANT 변경 사례)
thanikkal

2
당신은 또한 할 수 있습니다 Rails.root.join(*%w( app assets images logo.png )).
Nate

12
개인적으로 나는 새로운 문법을 좋아한다 :Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Ajedi32

105

정확성을 높이려면 다음을 사용해야합니다.

Rails.root.join('foo','bar')

/디렉토리 분리기가 아닌 플랫폼에서 앱을 작동시킬 수 있습니다 .


1
예를 들어, 내 맥북, Rails.root.join('foo','bar')평가하여 그 @Path이다 '/ 사용자 / purplejacket / my_rails_app / foo는 / 바'경로 이름 객체
Purplejacket

21

variable을 사용하여 rails 앱 경로에 액세스 할 수 있습니다 RAILS_ROOT.

예를 들면 다음과 같습니다.

render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"

2
RAILS_ROOT 레일 이후 3.0 insted 사용 Rails.root을 deprated있다
vidur punj

15

다른 모든 정답뿐만 아니라, 이후는 Rails.rootA는 Pathname목적이하지 않습니다 일 :

Rails.root + '/app/assets/...'

당신은 같은 것을 사용할 수 있습니다 join

Rails.root.join('app', 'assets')

문자열을 원하면 다음을 사용하십시오.

Rails.root.join('app', 'assets').to_s

1
실제로 Rails.root + 'app/assets' 않는 일을하지만, 그래 join깔끔한입니다.
Mischa

1
일반적으로 파일 구분 기호 토큰 (\ 또는 /)을 하드 코딩하는 것은 좋지 않습니다.
Alexander Bird

5

경우에 따라 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 ...

0

당신이 사용할 수있는:

Rails.root

그러나 자산에 가입하려면 다음을 사용할 수 있습니다.

Rails.root.join(*%w( app assets))

잘하면 이것이 당신을 도울 것입니다.


-2

Rails.root로 간단하게 추가하거나 무언가를 추가하고 싶다면 Rails.root.join ( 'app', 'assets'). to_s와 같이 사용할 수 있습니다.


이 답변을 삭제하십시오. 소음 일 뿐이며 질문에 아무것도 추가하지 않습니다.
luk2302

-5

Rails.root 를 작성 하고 Rails.root.join (* % w (앱 자산))으로 무엇이든 추가 하면 됩니다.


1
이 답변을 삭제하십시오. 소음 일 뿐이며 질문에 아무 것도 추가하지 않으며 형식이 잘못되었습니다.
luk2302
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.