0

在第 1 页中,我使用代码 A+B+C

在第 2 页中,我使用代码 B+C

因此,当我制作部分内容时,我真的不知道如何处理这个问题。

例如,在评论后系统中。我想在 2 个不同的页面中显示 @comments。在评论索引页面中,我们显示它所属的帖子。而在post show页面,我们只需要展示comments的内容。(因为不需要再展示comment.post)

    #Comment Index Page
    <% @comments.each do |comment| %>
        <%=  comment.post %>
        <%=  comment.author %>
        <%=  comment.content %>
    <% end %>

..

    #Post Show Page
    <% @comments.each do |comment| %>
        <%=  comment.author %>
        <%=  comment.content %>
    <% end %>

那么,如何使部分代码重用呢?也许像这样?但这有更优雅的方法吗?

    #Comment Index Page
    <% @comments.each do |comment| %>
        <%=  comment.post %>
        <%= render comment %>
    <% end %>

    #Post Show Page
    <% @comments.each do |comment| %>
        <%= render comment %>

<% 结束 %>

更新:我采用局部变量方法,并更新我的代码,如:

    # partial

    <% if include_topic %>
        <div class="Topic">
          <h5><%= link_to "#{comment.topic.content}", comment.topic %></h5>
        </div>
    <% end %>
    #Index
    <%= render @comments, :locals => {:include_topic => true } %>

但是我得到未定义的局部变量或方法 `include_topic' for #<# 我只是找不到调试这个问题的地方

4

2 回答 2

0

你的部分:

<%=  comment.post if include_post %>
<%=  comment.author %>
<%=  comment.content %>

你的代码:

#index page
<%= render :partial => "partial_path", :collection => @comments, :as => :comment, :locals => {:include_post => true } %>

#show page
<%= render :partial => "partial_path", :collection => @comments, :as => :comment, :locals => {:include_post => false } %>

语法可能要短得多,但这取决于您是否遵守 Rails 约定,请参阅 doc

旁注:我不喜欢 1.8.7 语法

于 2013-03-21T08:49:27.567 回答
0

在局部,

<% comments.each do |comment| %>
  <%=  comment.post if params[:controller] == "comments" %>
  <%=  comment.author %>
  <%=  comment.content %>
<% end %>

现在通过将评论指定为局部变量,在评论/索引和帖子/显示页面中呈现这个部分。

于 2013-03-21T08:50:21.430 回答