রেল ডিরেক্টরি রুট?


307

আমি কীভাবে আমার রেলস অ্যাপ্লিকেশনটির মূল ডিরেক্টরিটি পাব?

উত্তর:


545

কারাগারে 3 এবং আরও নতুন:

Rails.root

যা কোনও Pathnameবস্তু ফেরত দেয় । আপনি যদি একটি স্ট্রিং চান তবে আপনাকে যুক্ত করতে হবে .to_s। আপনি যদি আপনার রেলস অ্যাপ্লিকেশনটিতে অন্য কোনও পথ চান, আপনি এটি ব্যবহার করতে পারেন join:

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

রেল 2 এ আপনি RAILS_ROOTধ্রুবকটি ব্যবহার করতে পারেন যা একটি স্ট্রিং।


2
কারাগারে ২.৩ রেলস.রুট হল পথের একটি উদাহরণ যেখানে RAILS_ROOT একটি স্ট্রিং।
রিচার্ড

1
কেবল রেলস.রোট 3.1 এবং তারপরে (আহ ..
কনট্যান্ট

2
আপনি এটিও করতে পারেন Rails.root.join(*%w( app assets images logo.png ))
Nate

12
ব্যক্তিগতভাবে আমি নতুন সিনট্যাক্সটি পছন্দ করি:Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
আজেদি 32

105

অত্যন্ত নির্ভুলতার জন্য আপনার ব্যবহার করা উচিত:

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

যা আপনার অ্যাপ্লিকেশনটিকে এমন প্ল্যাটফর্মগুলিতে কাজ করার মঞ্জুরি দেয় যেখানে /ডিরেক্টরি বিভাজক নয়, কেউ যদি চেষ্টা করে এটির মাধ্যমে চালায়।


1
উদাহরণস্বরূপ, আমার ম্যাকবুকে, Rails.root.join('foo','bar')এমন প্যাথনাম অবজেক্টের মূল্যায়ন করুন যার @path '/ ব্যবহারকারী / বেগুনি জ্যাকেট / my_rails_app / foo / বার'
Purplejacket

21

আপনি ভেরিয়েবল ব্যবহার করে রেল অ্যাপ পাথ অ্যাক্সেস করতে পারেন RAILS_ROOT

উদাহরণ স্বরূপ:

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

2
RAILS_ROOT অবসন্ন হয় রেলগুলি 3.0 insted ব্যবহারের ব্যর্থতা Rails.root
বিদ্যুত পাঞ্জা

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' করে তবে হ্যাঁ আরও সুন্দর joinne
মিশা

1
ফাইল বিভাজক টোকেন (\ বা /) কী তা হার্ডকোড করা সাধারণত ভাল ধারণা নয়।
আলেকজান্ডার বার্ড

5

কিছু ক্ষেত্রে আপনি রেলগুলি লোড না করেই রেলগুলি রুট করতে পারেন।

উদাহরণস্বরূপ, টিডিডি'র মডেলগুলি যেগুলির 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.join ('অ্যাপ', 'সম্পদ') এর মতো)


দয়া করে এই উত্তরটি মুছুন, এটি কেবল গোলমাল, প্রশ্নের মধ্যে কিছু যুক্ত করে না।
luk2302

-5

কেবল Rails.root লিখে রেলস.রোট.জয়েন (*% ডাব্লু (অ্যাপ্লিকেশন সম্পদ)) দ্বারা যেকোন কিছু যুক্ত করুন to


1
দয়া করে এই উত্তরটি মুছুন, এটি কেবল গোলমাল, প্রশ্নের মধ্যে কিছু যুক্ত করে না এবং এটি খারাপভাবে ফর্ম্যাট করা হয়েছে।
luk2302
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.