Як отримати шлях до кореневого каталогу мого додатка 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акуратніше.
У деяких випадках вам може знадобитися корінь Rails, не завантажуючи Rails.
Наприклад, ви отримуєте швидший цикл зворотного зв'язку, коли моделі TDD'ing, які не залежать від Rails, вимагають 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 з їх специфікаційних файлів.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Ви можете використовувати:
Rails.root
Але для приєднання до активів ви можете використовувати:
Rails.root.join(*%w( app assets))
Сподіваємось, це вам допоможе.