为什么我对if语句的看法不能正常工作?

时间:2013-01-10 17:43:54

标签: ruby-on-rails ruby-on-rails-3

我得到了这个输出。输出中显示的数字为post.user.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 %>

2 个答案:

答案 0 :(得分: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_id进行状态验证)。这意味着帖子总是有用户关联,无需检查其存在。

答案 1 :(得分: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不同的帖子,昵称将在右侧。