Путь корневого каталога Rails? - PullRequest
294 голосов
/ 16 сентября 2010

Как мне получить путь к корневому каталогу моего приложения Rails?

Ответы [ 8 ]

524 голосов
/ 16 сентября 2010

В Rails 3 и новее:

Rails.root

, который возвращает объект Pathname.Если вы хотите строку, вы должны добавить .to_s.Если вам нужен другой путь в приложении Rails, вы можете использовать join следующим образом:

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

В Rails 2 вы можете использовать постоянную RAILS_ROOT, которая является строкой.

100 голосов
/ 16 сентября 2010

Для супер-правильности вы должны использовать:

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

, что позволит вашему приложению работать на платформах, где / не является разделителем каталогов, если кто-то попытается запустить его на одной.

21 голосов
/ 16 сентября 2010

Вы можете получить доступ к пути приложения rails, используя переменную RAILS_ROOT.

Например:

render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
14 голосов
/ 21 августа 2012

В дополнение ко всем другим правильным ответам, поскольку Rails.root является объектом Pathname, это не будет работать:

Rails.root + '/app/assets/...'

Вы можете использовать что-то вроде join

Rails.root.join('app', 'assets')

Если вы хотите строку, используйте это:

Rails.root.join('app', 'assets').to_s
4 голосов
/ 09 апреля 2016

В некоторых случаях вы можете захотеть получить 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

Что позволяет легко загружать простые старые объекты Ruby из их файлов спецификаций.

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...
0 голосов
/ 18 июня 2016

Просто написав Rails.root и добавить что-нибудь Rails.root.join (*% w (ресурсы приложения)). To_s

0 голосов
/ 26 мая 2016

Просто с помощью Rails.root или, если вы хотите добавить что-то, мы можем использовать это, например, Rails.root.join ('app', 'assets'). To_s

0 голосов
/ 18 августа 2015

Вы можете использовать:

Rails.root

Но для объединения активов вы можете использовать:

Rails.root.join(*%w( app assets))

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...