Rails根目录路径?

时间:2010-09-16 07:18:50

标签: ruby-on-rails

如何获取Rails应用程序的根目录路径?

9 个答案:

答案 0 :(得分:518)

在Rails 3和更新版本中:

Rails.root

返回Pathname个对象。如果你想要一个字符串,你必须添加.to_s。如果您想在Rails应用中使用其他路径,可以使用join,如下所示:

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

在Rails 2中,您可以使用RAILS_ROOT常量,这是一个字符串。

答案 1 :(得分:100)

为了超级正确,你应该使用:

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

这将允许您的应用在/不是目录分隔符的平台上工作,任何人都可以尝试在其中运行它。

答案 2 :(得分:21)

您可以使用变量RAILS_ROOT访问rails app路径。

例如:

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

答案 3 :(得分:13)

除了所有其他正确答案之外,由于Rails.rootPathname对象,因此无效:

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

您可以使用join

之类的内容
Rails.root.join('app', 'assets')

如果你想要一个字符串,请使用:

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

答案 4 :(得分:3)

在某些情况下,您可能需要Rails根目录而无需加载Rails。

例如,通过要求spec_helper代替rails_helper,TDD的模型不依赖于Rails,您可以获得更快的反馈周期。

# 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

这使您可以轻松地从其spec文件中加载Plain Old Ruby Objects。

# spec/models/poro_spec.rb

require 'spec_helper'

require 'poro'

RSpec.describe ...

答案 5 :(得分:0)

您可以使用:

Rails.root

但要加入您可以使用的资产:

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

希望这可以帮到你。

答案 6 :(得分:0)

module Rails
  def self.root
    File.expand_path("..", __dir__)
  end
end

来源: https://github.com/rails/rails/blob/5259062868dcf10fbcf735d6520e6a14e15fdcdb/actionmailer/test/abstract_unit.rb#L12

答案 7 :(得分:-1)

只需通过Rails.root或者如果你想追加一些我们就可以使用它像Rails.root.join(' app',' assets')。to_s

答案 8 :(得分:-3)

只需编写 Rails.root 即可 并附加任何东西 Rails.root.join(*%w(应用资产))。to_s