显示数组时出错

时间:2013-10-18 04:49:36

标签: mysql ruby-on-rails ruby arrays

我在控制器中创建了一个数组,以获取另一个数据库的值

@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

请提前帮助我。

2 个答案:

答案 0 :(得分:1)

你的@exams数组在运行代码之后看起来像是:['quants',5,5,'not_quants',4,3,...],而你正试图获得marks和{{1来自此数组中的每个元素。因此,对于字符串和整数,您没有方法namemarks,并且您收到错误。我不确定为什么它返回有关方法`Quants'的错误,但是你肯定在这里有错误。

答案 1 :(得分:0)

在考试中你推了一些类似mod.name的东西,在视图中使用它时你再次做es.name导致这个错误。因为es已经是'Quants',你不能在那上面调用一个方法。

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