Ruby循环问题

时间:2010-12-22 01:53:43

标签: ruby arrays loops

我似乎无法让这个循环正常工作

@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

2 个答案:

答案 0 :(得分:2)

Media表中有多少东西?如果每个MediaRating返回3个内容,那么你的循环就可以了。

此外,不需要unless @mr.empty?,因为如果@mr为空,则each块将不执行任何操作。

我认为这就是你所需要的:

@mr = MediaRating.where("user_id = ?", session['user_credentials_id'])
@mr.each do |rating|
    @m = Media.where("id = ?", rating.media_id)
    @history << @m
end
如果@m = Media.where("id = ?", rating.media_id)是关键字,

id应该只返回一件事。

答案 1 :(得分:0)

我认为你正在为@history数组添加错误的值。 如果您需要mediaRating历史记录,则应该正确添加媒体评级。

@history << mr

或者看起来像数据问题。验证外键依赖项。