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 的数据库是

+----+--------+-------+-------+
| 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.

请帮助我,在此先感谢。

4

2 回答 2

1

您的 @exams 数组在运行代码后看起来像: ['quants',5,5,'not_quants',4,3,...] ,并且您正尝试从该数组中的每个元素获取marks和获取。name所以,你没有字符串和整数的方法marksname你得到了错误。我不确定为什么它会返回有关方法 'Quants' 的错误,但肯定你在这里有错误。

于 2013-10-18T05:07:14.660 回答
0

在考试中,您推送了类似 mod.name 的内容,并且在视图中使用它时,您再次执行 es.name,这会导致此错误。由于 es 已经是 'Quants' 并且你不能调用它的方法。

您可以在视图中直接使用@module 并在其中给出这些条件,或者使@exams 成为对象数组而不是模块的名称、总数和标记

于 2013-10-18T05:17:47.673 回答