在View中访问Model函数时出现问题

时间:2013-02-05 07:57:58

标签: ruby-on-rails ruby

我有一个班级,教师,有多个整数列:

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

如果我没弄错的话,我不应该从视图中访问模型方法 - 应该留给控制器。但是自从它循环之后,在这种情况下,我有点迷失了。任何想法?

由于 本

4 个答案:

答案 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)

在你的控制器中,你应该进行任何中间逻辑。这种循环的目的是什么?它是否返回总值?如果确实如此,为什么不能在控制器中执行此操作并将操作结果返回到视图?