我有一个班级,教师,有多个整数列:
t.integer :a_students
t.integer :b_students
t.integer :c_students
t.integer :d_students
t.integer :f_students
我有一个观点,它贯穿所有老师,并说明他们班上有多少学生。现在虽然我可以在视图中添加所有学生,但为了让它看起来更好我想卸载将所有学生添加到模型中。我有以下模型方法:
def count_students( teacher_id )
t = Teacher.find(teacher_id)
total = t.a_students + t.b_students + t.c_students + t.d_students + t.f_students
total
end
如果我没弄错的话,我不应该从视图中访问模型方法 - 应该留给控制器。但是自从它循环之后,在这种情况下,我有点迷失了。任何想法?
由于 本
答案 0 :(得分:3)
在你的老师模型中有一个像这样的方法:
def total_students
a_students + b_students + c_students + d_students + e_students + f_students
end
然后在你看来,如果你有一个特定的老师,你可以做t.total_students来获得你想要的总数。
答案 1 :(得分:2)
Teacher模型类中的该方法将是一个实例方法。因此,您不需要打电话给DB来找到老师,因为您已经掌握了这些信息:
def count_students
total = a_students + b_students + c_students + d_students + f_students
end
您还可以使用self
访问实例变量和方法。 Ruby还返回上次计算的值,因此您不需要最后一次总计。
答案 2 :(得分:1)
为什么不将代码移到控制器上,为什么你有这些不同的学生?
如果您想收集特定教师的所有学生,请执行以下操作:
@teacher = Teacher.find(params[:teacher_id])
@students = @teacher.students.all
但是,嘿,也许我只是误解了你的问题。
答案 3 :(得分:0)
在你的控制器中,你应该进行任何中间逻辑。这种循环的目的是什么?它是否返回总值?如果确实如此,为什么不能在控制器中执行此操作并将操作结果返回到视图?