Kök dizin yolu raylar?


Yanıtlar:


545

Rails 3 ve daha yeni sürümlerde:

Rails.root

bir Pathnamenesne döndürür . Bir dize eklemek istiyorsanız eklemeniz gerekir .to_s. Rails uygulamanızda başka bir yol istiyorsanız, şu şekilde kullanabilirsiniz join:

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

Rails 2'de RAILS_ROOTbir dize olan sabiti kullanabilirsiniz .


2
Rails 2.3'te Rails.root, RAILS_ROOT öğesinin bir dize olduğu bir Pathname örneğidir.
Richard

1
Sadece 3.1 ve sonrası Rails.root (ahh .. SABİT değiştirme durumunda))
thanikkal

2
Ayrıca yapabilirsiniz Rails.root.join(*%w( app assets images logo.png )).
Nate

12
Şahsen ben yeni sözdizimi gibi:Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Ajedi32

105

Süper doğruluk için şunları kullanmalısınız:

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

Bu, uygulamanızın /herhangi biri üzerinde bir tane çalıştırmayı denemesi durumunda dizin ayırıcısı olmayan platformlarda çalışmasına izin verir .


1
Örneğin, MacBook'umda Rails.root.join('foo','bar')@ yolu '/ Users / purplejacket / my_rails_app / foo / bar' olan Purplename nesnesi olarak değerlendirilir
Purplejacket

21

Değişkenleri kullanarak raylar uygulama yoluna erişebilirsiniz RAILS_ROOT.

Örneğin:

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

2
Rails 3.0 insted Rails.root kullanmak beri RAILS_ROOT deprated
vidur punj

15

Diğer tüm doğru cevaplara ek olarak Rails.root, bir Pathnamenesne olduğundan, bu işe yaramaz:

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

Gibi bir şey kullanabilirsiniz join

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

Bir dize istiyorsanız bunu kullanın:

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

1
Aslında Rails.root + 'app/assets' yaptığı işi, ama evet joinkıvrımlara olduğunu.
Mischa

1
Genellikle dosya ayırıcı belirtecinin ne olduğunu sabitlemek iyi bir fikir değildir (\ veya /).
Alexander Bird

5

Bazı durumlarda Rails'i Rails yüklemek zorunda kalmadan isteyebilirsiniz.

Örneğin, TDD'ing modelleri yerine Rails'e bağımlı olmayan modeller spec_helperyerine daha hızlı bir geri bildirim döngüsü elde edersiniz 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

Bu, kendi düz dosyalarından Düz Eski Yakut Nesneleri kolayca yüklemenizi sağlar.

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...

0

Kullanabilirsiniz:

Rails.root

Ancak varlıklara katılmak için şunları kullanabilirsiniz:

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

Umarım bu size yardımcı olur.


-2

Basitçe Rails.root tarafından veya bir şey eklemek isterseniz, Rails.root.join ('app', 'asset') gibi kullanabiliriz.


Lütfen bu cevabı silin, sadece gürültü, soruya hiçbir şey eklemez.
luk2302

-5

Sadece Rails.root yazarak ve Rails.root.join (*% w (uygulama varlıkları)) ile her şeyi ekleyin .


1
Lütfen bu yanıtı silin, sadece gürültü, soruya hiçbir şey eklemez ve kötü biçimlendirilmiş.
luk2302
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.