【问题标题】:Rails: Size is not working on a has_many relationshipRails:大小不适用于 has_many 关系
【发布时间】:2016-03-18 23:30:14
【问题描述】:

我有两个模型,Student 和 Absence,关系如下:

class Student < ActiveRecord::Base
  has_many :absences

class Absence < ActiveRecord::Base
  belongs_to :student

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

a = Student.find(1)
a.absences.size 

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    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
    

    【讨论】:

    • 你是对的。我应该说,当我让它在控制台中工作时,我正在查询 Student 模型的一个实例。我将更新我的问题以澄清这一点。
    • @kongzi:发布想要的结果输出
    • 期望的结果输出将显示每个学生的缺勤次数。
    • @kongzi:你对这个问题给出了一个模糊的答案,仍然,检查更新的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多