0

複数の整数列を持つクラスTeacherがあります。

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

4 に答える 4

3

教師モデルには、次のようなメソッドがあります。

def total_students
  a_students + b_students + c_students + d_students + e_students + f_students
end

次に、特定の教師であるtがいる場合は、t.total_studentsを実行するだけで、必要な合計を取得できます。

于 2013-02-05T08:09:37.923 に答える
2

Teacherモデルクラスのそのメソッドはインスタンスメソッドになります。したがって、すでにその情報を持っているので、教師を見つけるためにDBを呼び出す必要はありません。

def count_students
    total = a_students + b_students + c_students + d_students + f_students
end

を使用してインスタンス変数とメソッドにアクセスすることもできますself。Rubyは最後に計算された値も返すため、最後の合計は必要ありません。

于 2013-02-05T08:07:37.153 に答える
1

コードをコントローラーに移動してみませんか。また、これらのさまざまな生徒がいるのはなぜですか。

特定の教師からすべての生徒を収集したい場合は、次のようにします。

@teacher = Teacher.find(params[:teacher_id])
@students = @teacher.students.all

しかしねえ、多分私はあなたの質問を誤解しているだけです。

于 2013-02-05T08:10:14.207 に答える
0

コントローラでは、途中のロジックを実行する必要があります。このループスルーの目的は何ですか?合計値を返しますか?もしそうなら、なぜあなたはこれをコントローラーで実行し、操作の結果をビューに返すことができないのですか?

于 2013-02-05T08:07:28.977 に答える