die einfache Beziehung zwischen Mitarbeitern Betrachten und Firmenmodellen (viele zu viele):Inklusive Methode (n + 1 Ausgabe) nicht mit einer Push-Methode arbeiten, aber tut mit + =, wenn auf einen Array zuweisen
Firmenmodell :
has_many :employees, through: :company_employees
has_many :company_employees
Mitarbeitermodell:
has_many :companies, through: :company_employees
has_many :company_employees
CompanyEmployee Modell (Join-Tabelle):
belongs_to :employee
belongs_to :company
auch Besitzer Modell:
has_many :companies
Also in meinem System, ich habe einen Eigentümer, die mehrere Unternehmen und Arbeitnehmer haben können, die gegebenen arbeiten für mehrere Unternehmen.
Nun, in meiner Mitarbeiter Controller ich will alle Mitarbeiter für einen Eigentümer Workin holen:
def owners_linked
@company_employees = []
owner.companies.each do |company|
@company_employees.push (company.company_employees.includes(:company, :employee)) # when += instead of push - it works
end
respond_to do |format|
format.js {render "employees_list"}
end
end
Ich brauche einen Zugriff auf Mitarbeiter Instanzen haben (persönliche Daten), company_employees Tabelle (Informationen über die Position im Unternehmen) und Unternehmen (unternehmensbezogene Daten).
Um n + 1 Problem zu lösen und die Leistung zu beschleunigen, verwende ich enthält Methode. Nun, das ist das Problem, dass in meinem Controller-Aktion in Zeile:
@company_employees.push company.company_employees.includes(:company, :employee)
wenn Push Methode verwendet es funktioniert nicht. Ich erhalte den Fehler in der Ansicht, dass die Mitarbeitermethode nicht definiert ist. Auf der anderen Seite, wenn ich den Push zu + = Zeichen ändern funktioniert es einwandfrei.
Kann mir jemand helfen zu verstehen, warum es so ist?
Ich weiß, dass + = ineffizient ist, also würde ich lieber nicht dabei bleiben.