【问题标题】:How does ActionView::Template :render decide where to load from?ActionView::Template :render 如何决定从哪里加载?
【发布时间】:2015-10-06 21:44:15
【问题描述】:

这就是问题所在,假设我有一些资源要索引在同一页面上,由标签分隔,在这种情况下,它是不同类型的内容:视频、pdf 等。我也有一部分被包含在内分成几个不同的视图,在这种情况下是搜索功能。 partial 做这样的事情来让你自定义它的各个部分:

在 _search.html.slim 中:

.toolbar
  .left
    = render 'left_toolbar', f: f

项目树看起来像:

app  
--views  
----media  
------index.html.slim  
------videos_list.html.slim  
------pdfs_list.html.slim  
------videos  
--------_left_toolbar.html.slim  
------pdfs  
--------_left_toolbar.html.slim

我有一个控制器来管理来自页面的各种内容资源的请求:

在 media_library_controller.rb 中:

def index
end

def videos
  <sets everything needed to render a videos list, @videos etc.>
  render :index
end

def pdfs
  <sets everything needed to render a pdf list, @pdfs etc.>
  render :index
end

并且在 index.html.slim

= render 'application/search'
ul.nav.nav-tabs
  li.active
    a href='#videosListTab' data-toggle='tab' Videos
  li
    a href='#pdfsListTab' data-toggle='tab' PDFs
ul.tab-content
  li.tab-pane.active#videosListTab
    .js-video-collection
      = render 'videos_list' if @videos
  li.tab-pane.active#pdfsListTab
    .js-pdf-collection
      = render 'pdfs_list' if @pdfs

我想要的是能够在控制器中定义当 search.html.slim 去寻找它时寻找哪个文件夹 left_toolbar.html.slim

我尝试过覆盖controller_path,但这似乎不起作用。 prepend_view_path 看起来很有希望,但它会将控制器名称附加到视图路径的末尾,这样我在设置它时就会有类似 app/views/media_library/videos/media_library 的东西。有什么建议吗?我不想有一个本地搜索部分。

【问题讨论】:

    标签: ruby-on-rails template-engine actionview


    【解决方案1】:

    我想要的是能够在控制器中定义当 search.html.slim 去寻找它时寻找哪个文件夹 left_toolbar.html.slim


    Perhaps you're getting ahead of yourself:

    &lt;%= render "shared/menu" %&gt;

    该代码将从 app/views/shared/_menu.html.erb.

    根据我对您的问题的理解,您想知道 Rails 如何为您的部分指定特定路径吗?没有必要 - 可以从您的应用中的任何位置引用部分。

    所以当你提到search.html 去寻找它时,你只需要将left_toolbar 的文件夹添加到路径中:

    render 'your_path/left_toolbar', f: f
    

    再次,对于您的媒体标签...它们都是部分的 - 只需使用部分路径中的文件夹名称:

    = render 'app/views/media_library/pdfs_list' if @pdfs
    

    【讨论】:

    • 对不起,可能不清楚,但搜索部分依赖于重载模板路径。 search.html.slim 所在的“共享”目录有一个名为 _left_toolbar.html.slim 的文件,但通过将另一个名为 _left_toolbar.html.slim 的文件放在与控制器对应的每个文件夹中,它会被每个资源覆盖。在查看 _left_toolbar.html.slim 的“共享”之前,首先查看控制器文件夹中的外观。这对于一个资源-> 一个文件夹来说很好,但正如您现在所看到的,我有多个它被挂断了。
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2018-03-26
    • 1970-01-01
    • 2021-05-08
    • 2020-08-14
    相关资源
    最近更新 更多