【问题标题】:Relative Paths From Partials Referencing Other Partials从部分引用其他部分的相对路径
【发布时间】:2013-10-09 10:19:49
【问题描述】:

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

<%= 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' %>

但两者都不起作用。

有没有办法使用相对路径进行部分解析?

【问题讨论】:

  • 请列出您的局部文件的实际路径
  • 如果您考虑第一个部分包含,则该包含不会“重置”正在构建的视图的工作文件夹。如果正在渲染的视图是 app/views/projects/show.erb,“渲染部分:'shared/page/head'”只是“去获取该文件的内容,然后在此处渲染它” - 你仍然在 app/views/projects 文件夹中。

标签: ruby-on-rails ruby-on-rails-3 erb relative-path partial


【解决方案1】:

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

【讨论】:

【解决方案2】:

我编写了一个辅助方法来实现它。听起来很完美。

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 

【讨论】:

  • 不错的解决方案!非常令人沮丧,它没有内置。对我来说,我做了一些调整,并用render partial: path, locals: option 改变了最后两行@
【解决方案3】:

正如另一位发帖者所说,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 中查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 2022-12-01
    • 2021-08-16
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多