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 每个 Post 都属于一个 User 是隐含的(您应该在 Post 模型上对属性进行存在验证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.idwho对于具有不同 id 的帖子,昵称将在右侧。

于 2013-01-10T18:23:16.110 回答