【发布时间】:2010-12-22 01:53:42
【问题描述】:
我似乎无法让这个循环正常工作
@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])
unless @mr.empty?
@mr.each do |rating|
@m = Media.where("id = ?", rating.media_id)
@m.each do |m|
@history << m
end
end
end
在 MediaRating 表中只有 3 行测试数据,但是当我在屏幕上输出数据时,@history 数组包含 9 个条目。我知道这与我在循环中做错了什么有关,但无法弄清楚。
工作代码
查看:
<!-- For Each -->
<% unless @history.empty? %>
<% @history.each do |m| %>
<tr class="control_result_row">
<td class="control_result"><%= m.first.title %></td>
<td class="control_result">Russian</td>
</tr>
<% end %>
<% else %>
<tr class="control_result_row">
<td class="control_result" colspan="2">You have no ratings logged</td>
</tr>
<% end %>
<!-- End For Each -->
控制器:
@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])
@mr.each do |rating|
@m = Media.where("id = ?", rating.media_id)
@history << @m
end
【问题讨论】:
-
媒体包含什么?检查嵌套 Media.where 调用后 @m 包含的内容
-
回复:您的 ERB 嵌入了
unless/else逻辑。当我进行代码审查或处理其他人的代码时,我不希望在代码中看到这种组合。当我破译unless中隐含的not时,我发现这个组合让我的大脑向下移动以弄清楚发生了什么。请参阅 John Nunemaker 的 "Unless, The Abused Ruby Conditional" 文章。