我有以下类方法goal
def evals
self.evaluations.order("eval_number").group_by(&:student_id)
end
def evals_for(student, i)
@evals = []
self.evals.values.each do |eval|
@evals << eval.keep_if { |e| e.student_id == student.id }
end
@evals = @evals.reject { |array| array.empty? }.first
@evals[i]
end
在视图中,我正在调用这样的第二种方法:
<% @student.student_group.eval_count.times do |i| %>
<td><%= goal.evals_for(@student, i) %></td>
<% end %>
返回
#<Evaluation:x>, #<Evaluation:y>, #<Evaluation:z>
如果我将类方法的最后一行更改为 call @evals[i].inspect
,我可以看到每个散列中的数据,如下所示:
#<Evaluation id: 1949, score: 3, created_at: "2013-08-28 09:44:32", updated_at: "2013-08-28 09:44:32", student_id: 32, goal_id: 63, eval_number: 29>
我想得到分数,但是当我@evals[i].score
在类方法的最后一行调用时,我得到一个错误 -undefined method 'score' for nil:NilClass
我知道我不能在哈希上调用类方法,但是有没有办法只提取那些数据?作为一个子问题,我对.first
和[i]
调用@evals.first.score
返回“3”之间的区别有点困惑——只是我不能先使用,因为我需要能够evaluation
依次访问每个实例。