Rails根目录的path?

我如何得到我的Rails应用程序的根目录path?

在Rails 3和更新的版本中:

Rails.root 

它返回一个Pathname对象。 如果你想要一个string,你必须添加.to_s 。 如果你想要在你的Rails应用程序中的另一个path,你可以使用像这样的连接:

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

在Rails 2中,你可以使用RAILS_ROOT常量,它是一个string。

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

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

这将允许您的应用程序在/不是目录分隔符的平台上工作,任何人都应该尝试在一个上运行它。

您可以使用variablesRAILS_ROOT访问rails应用程序path。

例如:

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

除了所有其他正确的答案之外,由于Rails.root是一个Pathname对象,所以这将不起作用:

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

你可以使用像join东西

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

如果你想要一个string使用这个:

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

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

例如,当TDD模型不依赖于Rails时,通过使用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文件加载简单的旧的Ruby对象。

 # spec/models/poro_spec.rb require 'spec_helper' require 'poro' RSpec.describe ... 

您可以使用:

 Rails.root 

但要join您可以使用的资产:

 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