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