0

この出力を取得します。出力に表示される番号はpost.user.idです。
IDが異なる場合は、バブルを前後に切り替える必要があります。
しかし、そうでなくても同じ人だと判断します。
なんで?

電流出力

2            Good, you?          > Person B
1            How have you been?  > person A
2            What's up?          > person B
Person A < Hello!!!!               1

私はこの出力ではありませんでした

2            Good, you?          > Person B
Person A < How have you been?      1
2            What's up?          > person B
Person A < Hello!!!!               1

意見

<% who = "" %>
<% @posts.each do |post| %>

    <tr id="<%= dom_post_id(post) %>">

        <% if post.user.id == who %>
            <td><%= post.user.nickname if post.user %></td>
            <td><div class="bubble me"><%= post.body %></div></td>
            <td><%= post.user.id %></td>
        <% else %>
            <td><%= post.user.id %></td>
            <td><div class="bubble you"><%= post.body %></div></td>
            <td><%= post.user.nickname if post.user %></td>     
        <% end %>
    </tr>
    <% who = post.user.id %>
<% end %>
4

2 に答える 2

2

次のようにコードをリファクタリングする必要があります。

<% user_id_for_left_side = @posts.first.try(:user_id) %>
<% @posts.each do |post| %>

  <tr id="<%= dom_post_id(post) %>">    
    <% if post.user_id == user_id_for_left_side %>
      <td><%= post.user.nickname %></td>
      <td><div class="bubble me"><%= post.body %></div></td>
      <td><%= post.user_id %></td>
    <% else %>
      <td><%= post.user_id %></td>
      <td><div class="bubble you"><%= post.body %></div></td>
      <td><%= post.user.nickname %></td>     
    <% end %>
  </tr>

<% end %>

なぜpost.user_id代わりに使用するのpost.user.idですか? 実行することpost.user_idは、より少ないリソースを使用するためですpost.user.id

なぜ削除するのif post.userですか? すべての投稿がユーザーに属していることは暗黙的です(属性の投稿モデルでプレゼンス検証を行う必要がありますuser_id)。つまり、投稿には常にユーザーが関連付けられており、その存在を確認する必要はありません。

于 2013-01-10T18:12:56.783 に答える
1
<% who = -1 %>
<% @posts.each do |post| %>

    <% if who == -1 %>
        <% who = post.user.id %>
    <% end %>

    <tr id="<%= dom_post_id(post) %>">

        <% if post.user.id == who %>
            <td><%= post.user.nickname if post.user %></td>
            <td><div class="bubble me"><%= post.body %></div></td>
            <td><%= post.user.id %></td>
        <% else %>
            <td><%= post.user.id %></td>
            <td><div class="bubble you"><%= post.body %></div></td>
            <td><%= post.user.nickname if post.user %></td>     
        <% end %>
    </tr>

<% end %>

追加されifたブロックはwho、ループが最初に遭遇した投稿のユーザーの ID に変数を設定し、再度設定することはありません。その後のループのすべての繰り返しで、投稿にその ID が含まpost.user.idれるwhoたびに、ニックネームが左側に表示されます。異なる ID の投稿の場合、ニックネームは右側になります。

于 2013-01-10T18:23:16.110 に答える