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