如何获取Rails应用程序的根目录路径?
为了超级正确,您应该使用:
Rails.root.join('foo','bar')
这将允许您的应用程序在 / 不是目录分隔符的平台上工作,任何人都可以尝试在其中运行它 .
/
除了所有其他正确的答案,由于 Rails.root 是一个Pathname对象,这不起作用:
Rails.root
Rails.root + '/app/assets/...'
你可以使用像 join 这样的东西
join
Rails.root.join('app', 'assets')
如果你想要一个字符串使用这个:
Rails.root.join('app', 'assets').to_s
在某些情况下,您可能需要Rails根,而无需加载Rails .
例如,当TDD的模型不依赖于Rails时,通过要求 spec_helper 而不是 rails_helper ,您可以获得更快的反馈周期 .
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
这使您可以轻松地从其spec文件中加载Plain Old Ruby Objects .
# spec/models/poro_spec.rb require 'spec_helper' require 'poro' RSpec.describe ...
在Rails 3和更新版本中:
返回一个Pathname对象 . 如果你想要一个字符串,你必须添加 .to_s . 如果您想在Rails应用程序中使用其他路径,可以像这样使用join:
.to_s
Rails.root.join('app', 'assets', 'images', 'logo.png')
在Rails 2中,您可以使用 RAILS_ROOT 常量,这是一个字符串 .
RAILS_ROOT
您可以使用:
但要加入您可以使用的资产:
Rails.root.join(*%w( app assets))
希望这对你有所帮助 .
只需通过Rails.root或者如果你想附加一些我们就可以使用它像Rails.root.join('app','assets') . to_s
只需编写 Rails.root 并通过 Rails.root.join(*%w( app assets)).to_s 附加任何内容
您可以使用变量 RAILS_ROOT 访问rails app路径 .
例如:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
8 回答
为了超级正确,您应该使用:
这将允许您的应用程序在
/
不是目录分隔符的平台上工作,任何人都可以尝试在其中运行它 .除了所有其他正确的答案,由于
Rails.root
是一个Pathname对象,这不起作用:你可以使用像
join
这样的东西如果你想要一个字符串使用这个:
在某些情况下,您可能需要Rails根,而无需加载Rails .
例如,当TDD的模型不依赖于Rails时,通过要求
spec_helper
而不是rails_helper
,您可以获得更快的反馈周期 .这使您可以轻松地从其spec文件中加载Plain Old Ruby Objects .
在Rails 3和更新版本中:
返回一个Pathname对象 . 如果你想要一个字符串,你必须添加
.to_s
. 如果您想在Rails应用程序中使用其他路径,可以像这样使用join:在Rails 2中,您可以使用
RAILS_ROOT
常量,这是一个字符串 .您可以使用:
但要加入您可以使用的资产:
希望这对你有所帮助 .
只需通过Rails.root或者如果你想附加一些我们就可以使用它像Rails.root.join('app','assets') . to_s
只需编写 Rails.root 并通过 Rails.root.join(*%w( app assets)).to_s 附加任何内容
您可以使用变量
RAILS_ROOT
访问rails app路径 .例如: