我得到了这个输出。输出中显示的数字为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 %>
答案 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不同的帖子,昵称将在右侧。