如何获取 Rails 应用程序的根目录路径?
在Rails 3及更新版本中:
Rails.root
返回Pathname对象。如果你想要一个字符串,你必须添加.to_s。如果你想在你的Rails应用程序中使用另一个路径,你可以像这样使用join:
Pathname
.to_s
join
Rails.root.join('app', 'assets', 'images', 'logo.png')
在Rails 2中,你可以使用RAILS_ROOT常量,它是一个字符串。
RAILS_ROOT
你可以使用变量RAILS_ROOT访问rails应用程序路径。
例如:
render :file => "#{RAILS_ROOT}/public/layouts/mylayout.html.erb"
为了获得更高的正确性,你应该使用:
Rails.root.join('foo','bar')
这将允许你的应用在/不是目录分隔符的平台上工作,如果有人尝试在一个平台上运行它。
/
除了所有其他正确答案外,由于Rails.root是一个Pathname对象,这将不起作用:
Rails.root + '/app/assets/...'
你可以使用类似join的东西
Rails.root.join('app', 'assets')
如果你想要一个字符串,使用这个:
Rails.root.join('app', 'assets').to_s
你可以使用:
但要加入您可以使用的资产:
Rails.root.join(*%w( app assets))
希望这能帮到你。
在某些情况下,您可能需要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
它允许您轻松地从规范文件中加载普通旧Ruby对象。
# spec/models/poro_spec.rb require 'spec_helper' require 'poro' RSpec.describe ...
简单地通过Rails。或者如果你想追加一些东西,我们可以使用Rails.root。加入.to_s(“应用”、“资产”)
只需写入Rails.root 并附加任何 Rails.root。Join (*%w(应用资产)).to_s
module Rails def self.root File.expand_path("..", __dir__) end end