【发布时间】:2016-01-04 04:43:50
【问题描述】:
您好,我有如下嵌套的属性模型,
Model Parent
has_many :students
has_many :classinos, through: :students
accepts_nested_attributes_for :students, :reject_if => lambda { |a| a[:firstname].blank?}, :allow_destroy => true
Model Student
belongs_to :Parents, for
has_many :classinfos, :dependent => :destroy
has_many :classlists, :through => :classinfos
accepts_nested_attributes_for :classinfos, :reject_if => lambda { |a| a[:classlist_id].blank?}, :allow_destroy => true
Model Classinfo
belongs_to :student, foreign_key: :student_id
belongs_to :classlist, foreign_key: :classlist_id
Model Classlist
has_many :students, :through => :classinfos
has_many :classinfos
这种关系就像... Parent(计算学费) > Classlist(:tuition)
Model Classlist有一个栏目叫“tuition”,我想把学生的所有学费汇总起来,在Parents模型中计算。
目前为止……
Model Classinfo
def tuitioncount
Classlist.where(:id => self.classlist_id).sum(:tuition)
end
我可以通过
显示学生的学费<% @student.classinfos.order(classlist_id: :asc).each do |classinfo| %>
<%= classinfo.tuitioncount%>
<%end%>
但我不知道如何总结它们并在 Model Parent 中定义一个方法。 我需要类似...
Model Parent
def balance
Classlist.where(:id => self.students.classinfos.classlist_id).sum(:tuition)
(or)
Student.where(:member_id => self.id).sum("student.tuitioncount")
end
请帮助我,我真的不知道如何从非常远的嵌套模型中提取值...
【问题讨论】:
-
一种方法是
Student.where(:member_id => self.id).to_a.sum { |student| student.tuitioncount }.. 但我认为可以进行1个查询来解决这个问题。
标签: ruby-on-rails ruby ruby-on-rails-4