Как мне получить путь к корневому каталогу приложения Rails?
Rails Корневой путь каталога?
Ответ 1
В Rails 3 и новее:
Rails.root
который возвращает объект Pathname
. Если вам нужна строка, вы должны добавить .to_s
. Если вы хотите использовать другой путь в своем приложении Rails, вы можете использовать join
следующим образом:
Rails.root.join('app', 'assets', 'images', 'logo.png')
В Rails 2 вы можете использовать константу RAILS_ROOT
, которая является строкой.
Ответ 2
Для правильной правильности вы должны использовать:
Rails.root.join('foo','bar')
который позволит вашему приложению работать на платформах, где /
не является разделителем каталогов, должен ли кто-нибудь попробовать и запустить его на одном.
Ответ 3
Вы можете получить доступ к пути к рельсам с помощью переменной RAILS_ROOT
.
Например:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
Ответ 4
В дополнение ко всем другим правильным ответам, поскольку Rails.root
является объектом Pathname
, это не сработает:
Rails.root + '/app/assets/...'
Вы можете использовать что-то вроде join
Rails.root.join('app', 'assets')
Если вы хотите, чтобы строка использовала это:
Rails.root.join('app', 'assets').to_s
Ответ 5
В некоторых случаях вам может понадобиться root Rails без необходимости загрузки Rails.
Например, вы получаете более быстрый цикл обратной связи, когда модели TDD, которые не зависят от 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
Это позволяет вам легко загружать объекты Plain Old Ruby из своих файлов спецификаций.
# spec/models/poro_spec.rb
require 'spec_helper'
require 'poro'
RSpec.describe ...
Ответ 6
Вы можете использовать:
Rails.root
Но чтобы присоединиться к активам, вы можете использовать:
Rails.root.join(*%w( app assets))
Надеюсь, это поможет вам.
Ответ 7
Просто Rails.root или если вы хотите добавить что-то, мы можем использовать его как Rails.root.join('app', 'assets'). to_s
Ответ 8
Просто напишите Rails.root и добавить что-либо Rails.root.join(*% w (активы приложения)). to_s