रेल रूट निर्देशिका पथ?


307

मुझे अपनी रेल एप्लिकेशन की रूट निर्देशिका पथ कैसे मिल सकती है?

जवाबों:


545

रेल 3 और नए में:

Rails.root

जो एक Pathnameवस्तु देता है । यदि आप एक स्ट्रिंग चाहते हैं तो आपको जोड़ना होगा .to_s। यदि आप अपने रेल एप्लिकेशन में एक और रास्ता चाहते हैं, तो आप joinइस तरह का उपयोग कर सकते हैं :

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

रेल 2 में आप RAILS_ROOTस्थिरांक का उपयोग कर सकते हैं , जो एक स्ट्रिंग है।


2
रेल में 2.3 Rails.root पथनाम का एक उदाहरण है जहाँ RAILS_ROOT एक स्ट्रिंग है।
रिचर्ड

1
3.1 और बाद में केवल Rails.root (आह .. लगातार बदलने के मामले;))
thanikkal

2
आप भी कर सकते हैं Rails.root.join(*%w( app assets images logo.png ))
रात्रि

12
व्यक्तिगत रूप से मुझे नया वाक्यविन्यास पसंद है:Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Ajedi32

105

सुपर शुद्धता के लिए, आपको उपयोग करना चाहिए:

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

जो आपके एप्लिकेशन को उन प्लेटफ़ॉर्म पर काम करने की अनुमति देगा जहां /निर्देशिका विभाजक नहीं है, किसी को भी इसे एक पर चलाने और चलाने की कोशिश करनी चाहिए।


1
उदाहरण के लिए, मेरे मैकबुक पर, Rails.root.join('foo','bar')Pathname ऑब्जेक्ट का मूल्यांकन करता है , जिसका @path '/ Users / purplejacket / my_rails_app / foo / bar' है
पर्पलजैकेट

21

आप चर का उपयोग करके रेल पथ तक पहुँच सकते हैं RAILS_ROOT

उदाहरण के लिए:

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

2
Rails_ROOT रेल 3.0 के उपयोग से वंचित है Rails.root
vidur punj

15

अन्य सभी सही उत्तरों के अलावा, चूंकि Rails.rootएक Pathnameवस्तु है, यह काम नहीं करेगा:

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

आप कुछ का उपयोग कर सकते हैं join

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

यदि आप एक स्ट्रिंग का उपयोग करना चाहते हैं:

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

1
वास्तव Rails.root + 'app/assets' में काम करता है , लेकिन हाँ join, निरर्थक है।
मिशा

1
यह आमतौर पर एक अच्छा विचार नहीं है कि फ़ाइल विभाजक टोकन क्या है (\ या /) हार्डकोड।
अलेक्जेंडर बर्ड

5

कुछ मामलों में आप रेल को लोड करने के लिए बिना रूट रूट कर सकते हैं।

उदाहरण के लिए, आपको एक त्वरित प्रतिक्रिया चक्र मिलता है जब TDD'ing मॉडल जो आवश्यकता के 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

जो आपको अपनी पुरानी फाइलों से प्लेन पुरानी रूबी वस्तुओं को आसानी से लोड करने की अनुमति देता है।

# 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 ('ऐप', 'एसेट्स') की तरह कर सकते हैं। to_s


कृपया इस उत्तर को हटा दें, यह केवल शोर है, प्रश्न में कुछ भी नहीं जोड़ता है।
luk2302

-5

बस Rails.root लिखकर और Rails.root.join (*% w (ऐप एसेट्स)) to_s द्वारा कुछ भी जोड़ना


1
कृपया इस उत्तर को हटा दें, यह केवल शोर है, प्रश्न में कुछ भी नहीं जोड़ता है और यह खराब स्वरूपित है।
luk2302
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.