2013-10-18 76 views
0

我在控制器中創建一個數組以得到另一數據庫的值作爲錯誤在顯示陣列

@exam_group = ExamGroup.find(params[:exam_group]) 
@student = Student.find_by_id(params[:student]) 
@batch = @student.batch 
@modules = StudentAdditionalField.find(:all) 
@total = Answer.sum(:marks) 
@exams = [] 
@modules.each do |mod| 
    @exams.push mod.name unless mod.name.nil? 
    @exams.push mod.marks unless mod.marks.nil? 
    @exams.push total unless total.nil? 
end 

@modules的DATABSE是

+----+--------+-------+-------+ 
| id | name | total | marks | 
+----+--------+-------+-------+ 
| 1 | Quants |  5 |  5 | 
+----+--------+-------+-------+ 

應當顯示在視圖

<table id="listing" align="center" width="100%" cellpadding="1" cellspacing="1"> 
    <tr class="tr-head"> 
    <td><%#= t('subject') %></td> 
     <td><%= t('marks_obtained') %></td> 
     <td><%= t('max') %></td> 
    </td> 
    </tr> 
    <% @exams.each do |es| %> 
    <tr class="tr-<%= cycle('odd', 'even') %>"> 
     <td class="col-1"> <%= es.name %></td> 
     <td class="col-1"><%= es.marks || '-' %></td> 
     <% total_marks_attained = @total %> 
     <td class="col-1"><%= es.marks %></td> 
     <% total_max_marks = @total %> 
     </td> 
    </tr> 
    <% end %> 

    <tr class="tr-head"> 
     <td><%= t('total_marks') %>:</td> 
     <td><%= total_marks_attained %></td><td><%= total_max_marks %></td> 

    </tr> 

</table> 

但它返回錯誤爲undefined method 'Quants' for "Quants":String

請幫助我,在此先感謝。

回答

1

運行代碼後,您的@exams數組看起來像:['quants',5,5,'not_quants',4,3,...],並且您試圖從此處的每個元素獲取marksname陣列。因此,對於字符串和整數,您沒有方法marksname,並且出現錯誤。我不知道爲什麼它會返回有關「Quants」方法的錯誤,但肯定你在這裏有錯誤。

0

在考試中,您推送了一些類似於該mod.name的內容,並在視圖中使用它時再次執行導致此錯誤的es.name。由於es已經是'Quants',所以你不能調用這個方法。

您可以直接在視圖中使用@module並在那裏給出這些條件或使@exams爲對象數組而不是模塊名稱,總數和標記