2010-12-22 118 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歷史,您應該添加媒體評級權限。或者它看起來像是一個數據問題。驗證外鍵的依賴關係。