如何获取Rails应用程序的根目录路径?
答案 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.root
是Pathname
对象,因此无效:
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
答案 7 :(得分:-1)
只需通过Rails.root或者如果你想追加一些我们就可以使用它像Rails.root.join(' app',' assets')。to_s
答案 8 :(得分:-3)
只需编写 Rails.root 即可 并附加任何东西 Rails.root.join(*%w(应用资产))。to_s