如何渲染局部视图?

4

我有以下文件:

/controllers/test_controller.rb

/views/test/index.html.erb

/views/test/_partial.html.erb

我想在index视图中呈现这个局部视图。 我正在做如下操作:

index.html.erb

<h1>Test#index</h1>
<%= render "_partial" %>

_partial.html.erb

<p>This is partial content</p>

当我访问localhost:3000/test/index时,出现以下错误:
ActionView::MissingTemplate in Test#index
Missing partial /__partial with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.
Extracted source (around line #2):

1 <h1>Test#index</h1>
2 <%= render "_partial" %>

您知道我做错了什么吗?


4
尝试以下内容:<%= render "partial" %> - Shani
1
@Shani:谢谢。可以这样做。所以文件名仍然应该有下划线,但在引用时不要使用下划线? - 4thSpace
局部视图以前导下划线命名,以使其与常规视图区分开来,即使在没有下划线的情况下也是如此。即使从另一个文件夹中引入局部视图,这仍然成立:http://edgeguides.rubyonrails.org/layouts_and_rendering.html#using-partials - Shani
3个回答

5

这个问题已经被回答过了,但是如果局部视图文件和当前视图文件在同一个目录下,你可以直接渲染局部视图文件而不需要使用下划线。但是如果你想从另一个控制器中提取局部视图文件,你需要退回一步并使用更完整的路径,比如"users/partial"


2

一切取决于你的部分文件所在的位置。如果你的部分文件_partial在layouts文件夹中,你只需要这样调用部分文件<%= render "partial" %>

Rails知道以下划线开头的文件是部分文件。因此,当你渲染部分文件时,不需要使用下划线。

记住,Rails遵循约定优于配置的原则。


0

你可以试试这个

<% @users.each do |user| %>
        <%= render 'erb_partials/post', user: user %>
    <% end %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接