0

Ich habe zwei Modelle, Studenten und Abwesenheit, mit der Beziehung:Rails: Größe funktioniert nicht auf einem has_many Beziehung

class Student < ActiveRecord::Base 
    has_many :absences 

class Absence < ActiveRecord::Base 
    belongs_to :student 

Ich möchte sehen, wie viele Abwesenheiten haben für jeden Schüler angemeldet worden ist, und zeigen, dass insgesamt auf der #show-Seite des Schülers. In der Konsole Ich bin in der Lage, dies Abfrage durch den Aufruf:

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

Allerdings kann ich nicht scheinen, um es in der App selbst zu arbeiten. Wäre die bevorzugte Abfrage in der App das Modell oder der Controller?

Antwort

1

Dies wird nie funktionieren, da Sie die Assoziation auf dem Modell, nicht Instanz aufrufen. Zunächst sollten Sie einen Schüler holen und dann zugehörigen Datensätze zählen:

Student.find(<id here>).absences.size 

Um diese Informationen für alle Schüler zu aggregieren, können Sie absence_count Attribut Accessor in Student Modell hinzufügen:

attr_accessor :absence_count 

und dann etwas tun, wie dies:

Student.includes(:absences).each{|s| s.absence_count = s.absences.size} 

Wenn Sie nur ausgeben müssen sie in der Ansicht, dann können Sie versuchen, die folgenden Schritte aus:

Student.includes(:absences).each do |student| 
    puts student.absences.size 
end 
+0

Sie haben Recht. Ich hätte sagen sollen, dass ich eine Instanz des Student-Modells abgefragt habe, als ich es in der Konsole zum Laufen brachte. Ich werde meine Frage aktualisieren, um das zu klären. – kongzi

+0

@kongzi: Post die gewünschte Ergebnisausgabe – potashin

+0

Gewünschte Ergebnisausgabe wäre, für jeden Schüler ihre Anzahl von Abwesenheiten zu zeigen. – kongzi

Verwandte Themen