Caminho do diretório raiz do Rails?


Respostas:


545

No Rails 3 e mais recente:

Rails.root

que retorna um Pathnameobjeto. Se você quer uma string, você deve adicionar .to_s. Se você deseja outro caminho no seu aplicativo Rails, pode usar o joinseguinte:

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

No Rails 2, você pode usar a RAILS_ROOTconstante, que é uma string.


2
No Rails 2.3, o Rails.root é uma instância do nome do caminho em que RAILS_ROOT é uma string.
Richard

1
Somente Rails.root no 3.1 e posterior (ahh .. o caso de mudar CONSTANT;)) #
thanikkal

2
Você também pode Rails.root.join(*%w( app assets images logo.png )).
Nate

12
Pessoalmente eu gosto da nova sintaxe:Rails.root / 'app' / 'assets' / 'images' / 'logo.png'
Ajedi32

105

Para super correção, você deve usar:

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

que permitirá que seu aplicativo funcione em plataformas onde /não existe o separador de diretório, se alguém tentar executá-lo em um.


1
Por exemplo, no meu MacBook, é Rails.root.join('foo','bar')avaliado o objeto Nome do caminho cujo @caminho é '/ Users / purplejacket / my_rails_app / foo / bar'
Purplejacket

21

Você pode acessar rails caminho aplicativo usando variável RAILS_ROOT.

Por exemplo:

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

2
RAILS_ROOT está obsoleto desde que o Rails 3.0 instou o uso do Rails.root
Enviado em 23/11/2012

15

Além de todas as outras respostas corretas, como Rails.rooté um Pathnameobjeto, isso não funcionará:

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

Você poderia usar algo como join

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

Se você deseja uma string, use isto:

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

1
Realmente Rails.root + 'app/assets' faz o trabalho, mas sim joiné mais puro.
precisa

1
Geralmente, não é uma boa ideia codificar qual é o token do separador de arquivos (\ ou /).
Alexander Pássaro

5

Em alguns casos, você pode querer a raiz do Rails sem precisar carregar o Rails.

Por exemplo, você obtém um ciclo de feedback mais rápido ao TDD'ing de modelos que não dependem do Rails exigindo em spec_helpervez de 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

O que permite carregar facilmente objetos antigos simples do Ruby a partir de seus arquivos de especificação.

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...

0

Você pode usar:

Rails.root

Mas, para ingressar nos ativos, você pode usar:

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

Espero que isso ajude você.


-2

Simplesmente pelo Rails.root ou se você quiser acrescentar algo, podemos usá-lo como Rails.root.join ('app', 'assets'). To_s


Por favor, exclua esta resposta, é apenas ruído, não adiciona nada à pergunta.
Luk2302

-5

Simplesmente escrevendo Rails.root e anexando qualquer coisa por Rails.root.join (*% w (ativos do aplicativo)). To_s


1
Exclua esta resposta, é apenas ruído, não adiciona nada à pergunta e está mal formatada.
Luk2302
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.