Rails:大小不适用于has_many关系

时间:2016-03-18 23:30:15

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord

我有两个模特,学生和缺席,关系:

class Student < ActiveRecord::Base
  has_many :absences

class Absence < ActiveRecord::Base
  belongs_to :student

我想看看每个学生记录了多少缺席,并在学生的#show页面上显示总数。在控制台中,我可以通过调用:

来查询
a = Student.find(1)
a.absences.size 

但是,我似乎无法让它在应用程序本身中运行。在应用程序中查询这个的首选方法是在模型还是控制器中?

1 个答案:

答案 0 :(得分:1)

这将永远不会起作用,因为您在模型上调用关联,而不是实例。首先,你应该取一个学生,然后计算相关的记录:

Student.find(<id here>).absences.size

要为所有学生汇总此信息,您可以在absence_count模型中添加Student属性访问者:

attr_accessor :absence_count

然后做这样的事情:

Student.includes(:absences).each{|s| s.absence_count = s.absences.size}

如果您只需要在视图中输出它,那么您可以尝试以下操作:

Student.includes(:absences).each do |student|
  puts student.absences.size
end