来自引用其他部分的部分的相对路径

问题描述 投票:0回答:3

我正在使用(主要)部分:

<%= render partial: 'shared/page/head' %>

它使用了其他(辅助)部分:

<head>
  <%= render partial: 'shared/page/head/title' %>
  <%= render partial: 'shared/page/head/meta' %>
  ...
  <%= render partial: 'shared/page/head/fonts' %>
  ...
  <%= render partial: 'shared/page/head/google_analytics' %>
</head>

如您所见,我当前正在为这些次要部分使用相对于

app/view
的路径,即使它们与主要部分位于同一目录中。

我尝试过使用相对路径:

<%= render partial: 'title' %>

或者

<%= render partial: './title' %>

但是都不起作用。

有没有办法使用相对路径来部分解析它使用的部分?

ruby-on-rails ruby-on-rails-3 erb relative-path partial
3个回答
3
投票

这可能是解决您问题的一种方法:http://apidock.com/rails/ActionController/Base/prepend_view_path


1
投票

正如另一位海报所提到的,可以使用

prepend_view_path
来实现这一点。

具体实现方法如下:

controllers/shared_page_controller.rb

class SharedPageController < ActionController::Base
  before_action :set_view_paths

  # ... 

  private

  def set_view_paths
    prepend_view_path 'app/views/shared/page/head'
  end
end

views/shared/page/head.html.erb

<head>
  <%# This will try to find the partial `views/shared/page/head/title.html.erb` %>
  <%= render partial: 'title' %>
  <%= render partial: 'meta' %>
  <%# ... %>
  <%= render partial: 'fonts' %>
  <%# ... %>
  <%= render partial: 'google_analytics' %>
</head>

现在 Rails 不仅会在

app/views
中查找部分内容,还会在
app/views/shared/page/head
中查找。


1
投票

我为此编写了一个辅助方法,效果非常好:

def render_relative_partial(relative_path, option={})
    caller_path = caller[0].split(".")[0].split("/")[0..-2].join("/")
  path = caller_path.gsub("#{Rails.root.to_s}/app/views/","") + "/#{relative_path}"

  option[:partial] = path
  render option
end 
© www.soinside.com 2019 - 2024. All rights reserved.