0

私が関係して、二つのモデル、学生や不在を持っている:私は生徒ごとにログに記録されているどのように多くの欠席見たいのRails:サイズはhas_manyの関係に動作していない

class Student < ActiveRecord::Base 
    has_many :absences 

class Absence < ActiveRecord::Base 
    belongs_to :student 

、と示すこと生徒の#ショーページの合計。コンソールで、私はこれを呼び出すことでこれを照会することができます:

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

しかし、私はそれがアプリ自体で動作するように見えることはできません。アプリでこれをクエリする好ましい方法は、モデルやコントローラにあるでしょうか?

答えて

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 
+0

あなたはそうです。私はそれがコンソールで動作するようになったら、私はStudentモデルのインスタンスを照会していると言っていたはずです。それを明確にするために質問を更新します。 – kongzi

+0

@ kongzi:希望の結果出力を投稿する – potashin

+0

希望の結果出力は、各生徒の休暇の数を表示することです。 – kongzi