获取"未定义的方法`每个'对于#<标记: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
?
答案 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