Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从';之间的散列/差异获取属性;。第一';和';[i] &x27;_Ruby On Rails_Ruby_Ruby On Rails 3_Hash - Fatal编程技术网

Ruby on rails 从';之间的散列/差异获取属性;。第一';和';[i] &x27;

Ruby on rails 从';之间的散列/差异获取属性;。第一';和';[i] &x27;,ruby-on-rails,ruby,ruby-on-rails-3,hash,Ruby On Rails,Ruby,Ruby On Rails 3,Hash,对于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 }

对于
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
我想获得分数,但当我调用class方法最后一行的
@evals[I].score
时,我得到一个错误-
未定义的方法“score”,表示nil:NilClass


我知道我不能在散列上调用类方法,但有没有办法只提取这些数据?作为一个子问题,我对调用
@evals时
.first
[I]
之间的区别有点困惑。first.score
返回“3”-只有我不能使用first,因为我需要能够依次访问
evaluation
的每个实例

这不是一个简单的散列:

#<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>
#<Evaluation:x>, #<Evaluation:y>, #<Evaluation:z>
#<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>
#<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 if @evals[i]