变得奇怪&未定义的方法'错误

时间:2015-12-14 13:21:17

标签: ruby-on-rails ruby

获取"未定义的方法`每个'对于#<标记:0x00000001e057d0>"

以下是观点:

<% @current_marks.each do |m| %>
  <tr>
    <td class='col-md-3'><%= m.subject %></td>
    <td class='col-md-3'><%= m.professor %></td>
    <td class='col-md-3'><%= m.semester %></td>
    <td class='col-md-3'><%= m.points %></td>
  </tr>
<% end %>

还有一个控制器:

def show
  @student = Student.find(params[:id])
  @students = Student.all
  @current_marks = Mark.find_by! student_id: @student.id
rescue ActiveRecord::RecordNotFound
  redirect_to :action => 'set_marks'
end

我已经检查了一个Id param并且它是正确的。此外,我在数据库中有Mark个记录,其中包含正确的student_id。如何在没有任何错误的情况下致电@current_marks

2 个答案:

答案 0 :(得分:7)

find_by将为您提供第一个匹配的记录而不是一个集合,因此您无法在此处调用每个记录。相反,如果您需要所有匹配的记录,您可以使用哪里

 @current_marks = Mark.where student_id: @student.id

答案 1 :(得分:2)

要添加到punitcse的答案,您还需要检查您的关联,因为调用两个类调用效率非常低。

-

你应该能够逃脱:

def show
  @student = Student.find params[:id]
  @current_marks = @student.marks
end

这是考虑在您的模型中设置以下内容:

#app/models/student.rb
class Student < ActiveRecord::Base
   has_many :marks
end 

#app/models/mark.rb
class Mark < ActiveRecord::Base
   belongs_to :student
end