我正在使用(主要)部分:
<%= 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' %>
但是都没有工作。
有没有办法让部分解决它使用相对路径的部分?
答案 0 :(得分:3)
答案 1 :(得分:0)
我写了一个辅助方法来实现它。听起来像是完美的工作。
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
答案 2 :(得分:0)
正如另一位发帖人所述,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
中查找。