簡體   English   中英

Rails 根目錄路徑?

[英]Rails Root directory path?

如何獲取 Rails 應用的根目錄路徑?

在 Rails 3 和更新版本中:

Rails.root

它返回一個Pathname對象。 如果你想要一個字符串,你必須添加.to_s 如果你想在你的 Rails 應用程序中使用另一個路徑,你可以像這樣使用join

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

在 Rails 2 中,您可以使用RAILS_ROOT常量,它是一個字符串。

對於超級正確性,您應該使用:

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

這將允許您的應用程序在/不是目錄分隔符的平台上工作,如果有人嘗試在一個平台上運行它。

您可以使用變量RAILS_ROOT訪問 rails 應用程序路徑。

例如:

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

除了所有其他正確答案之外,由於Rails.root是一個Pathname對象,這將不起作用:

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

你可以使用像join這樣的東西

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

如果你想要一個字符串使用這個:

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

在某些情況下,您可能需要 Rails 根目錄而不必加載 Rails。

例如,通過要求spec_helper而不是rails_helper對不依賴於 Rails 的模型進行spec_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 ...
module Rails
  def self.root
    File.expand_path("..", __dir__)
  end
end

來源: https : //github.com/rails/rails/blob/5259062868dcf10fbcf735d6520e6a14e15fdcdb/actionmailer/test/abstract_unit.rb#L12

您可以使用:

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附加任何內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM