ActionView :: Template:render如何决定从哪里加载?

时间:2015-10-06 21:44:16

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

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

_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之类的内容。有什么建议?我不希望局部搜索部分。

1 个答案:

答案 0 :(得分:0)

  

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

Perhaps you're getting ahead of yourself

  

default-local

     

该代码将从中拉出部分内容   应用程序/视图/共享/ _menu.html.erb。

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

因此,当您提到<%= render "shared/menu" %>寻找它时,您只需将search.html的文件夹添加到路径中:

left_toolbar

同样,使用您的媒体标签...他们是所有部分内容 - 只需使用部分路径中的文件夹名称:

render 'your_path/left_toolbar', f: f