ฉันจะรับเส้นทางไดเรกทอรีรูทของแอพ Rails ได้อย่างไร?
ฉันจะรับเส้นทางไดเรกทอรีรูทของแอพ Rails ได้อย่างไร?
คำตอบ:
ใน 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')
ประเมินเป็นวัตถุ Pathname ที่ @path คือ '/ Users / purplejacket / my_rails_app / foo / bar'
คุณสามารถเข้าถึงเส้นทางแอพทางรางโดยใช้ตัวแปร RAILS_ROOT
คุณสามารถเข้าถึงแอพพลิเครางเส้นทางใช้ตัวแปร
ตัวอย่างเช่น:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
นอกจากคำตอบที่ถูกต้องอื่น ๆ ทั้งหมดเนื่องจากRails.root
เป็นPathname
วัตถุสิ่งนี้จะไม่ทำงาน:
Rails.root + '/app/assets/...'
คุณสามารถใช้สิ่งที่ชอบ join
Rails.root.join('app', 'assets')
หากคุณต้องการสตริงใช้สิ่งนี้:
Rails.root.join('app', 'assets').to_s
Rails.root + 'app/assets'
ไม่ทำงาน แต่ใช่join
เป็น neater
ในบางกรณีคุณอาจต้องการรูทของ Rails โดยไม่ต้องโหลด Rails
ตัวอย่างเช่นคุณจะได้รับการตอบรับรอบได้เร็วขึ้นเมื่อรุ่น 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
ซึ่งช่วยให้คุณโหลดอ็อบเจกต์ Ruby Old Plain ได้อย่างง่ายดายจากไฟล์ข้อมูลจำเพาะ
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
คุณสามารถใช้ได้:
Rails.root
แต่ในการเข้าร่วมสินทรัพย์คุณสามารถใช้:
Rails.root.join(*%w( app assets))
หวังว่านี่จะช่วยคุณได้
เพียงแค่ใช้ Rails.root หรือหากคุณต้องการผนวกสิ่งที่เราสามารถใช้ได้เช่น Rails.root.join ('app', 'สินทรัพย์') to_s
เพียงแค่เขียนRails.root และต่อท้ายสิ่งใดก็ได้โดย Rails.root.join (*% w (เนื้อหาแอป)) to_s