2010-12-22 115 views
1

我似乎无法得到这个循环正确红宝石环路问题

@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 
+0

媒体包含什么?在嵌套Media.where调用 – 2010-12-22 02:04:19

+0

之后检查@m包含的内容:使用嵌入式“除非/ else”逻辑的ERB。当我执行代码评论或处理其他人的代码时,我更喜欢在代码中看不到该代码组合。我发现组合使我的大脑降档,以弄清楚发生了什么,因为我解释了“除非”中暗示的“不”。见约翰Nunemaker的[“除非,滥用Ruby有条件”](http://railstips.org/blog/archives/2008/12/01/unless-the-abused-ruby-conditional/)文章。 – 2010-12-22 05:41:31

回答

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是一个关键。

+0

MediaRating表中有3件事(目前用于测试目的),但是媒体表中有100个项目 – dennismonsewicz 2010-12-22 02:05:32

0

我认为你正在向@history数组添加错误的值。 如果您想要mediaRating历史,您应该添加媒体评级权限。或者它看起来像是一个数据问题。验证外键的依赖关系。