0

ページ1では、コードA + B+Cを使用します

2ページ目では、コードB+Cを使用しています

ですから、パーシャルを作るとき、これにどう対処するかは本当にわかりません。

たとえば、ポストコメントシステムでは。@commentsを2つの異なるページに表示したいと思います。コメントインデックスページに、所属する投稿を表示します。そして、ポストショーページでは、コメントの内容を表示するだけです(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'を取得します。この問題をデバッグする場所が見つかりません。

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 に答える