我在控制器中创建了一个数组,以获取另一个数据库的值
@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的数据库是
+----+--------+-------+-------+
| 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
。
请提前帮助我。
答案 0 :(得分:1)
你的@exams数组在运行代码之后看起来像是:['quants',5,5,'not_quants',4,3,...],而你正试图获得marks
和{{1来自此数组中的每个元素。因此,对于字符串和整数,您没有方法name
和marks
,并且您收到错误。我不确定为什么它返回有关方法`Quants'的错误,但是你肯定在这里有错误。
答案 1 :(得分:0)
在考试中你推了一些类似mod.name的东西,在视图中使用它时你再次做es.name导致这个错误。因为es已经是'Quants',你不能在那上面调用一个方法。
您可以直接在视图中使用@module并在那里提供这些条件,或者使@exams成为一个对象数组,而不是模块的名称,总数和标记