Ich habe eine Ruby 2.2.2 App, die ActiveRecord als ORM (ähnlich Rails) verwendet. Ich habe zwei Tabellen, "Benutzer" und "Konten", wo "Konten" belongs_to :user
haben. Für einen bestimmten Benutzer, möchte ich einfach zu eifrig Last der Inhalt der „Konten“ Tabelle in ein Ruby-Objekt (genannt user_accounts
), so kann ich führen Operationen wie:Eager Laden von Datenbanktabelle mit ActiveRecord
user_accounts.find_by_product_name("nameofproduct")
... ohne die find_by_product_name
Verfahren eine Durchführung SQL-Abfrage Ich möchte einfach alle Einträge aus der Tabelle "accounts" (die zu einem bestimmten Benutzer gehören) in ein Ruby-Objekt laden, damit ich die Anzahl der SQL-Abfragen minimieren kann.
Egal wie viel Dokumentation ich lese, ich kann nicht herausfinden, wie man das richtig macht. Ist das möglich? Wenn das so ist, wie?
Das scheint gut zu funktionieren, danke. Eine letzte Frage: Wenn ich einen Datensatz manuell an dieses Array anhängen wollte, wäre das möglich? Also sag ich eifrig geladen die user.accounts, und ich möchte sowohl A) einen Datensatz in der tatsächlichen DB und B) fügen Sie diesen Datensatz an die user.accounts eifrig geladenen Array, ohne die gesamte Tabelle neu laden, ist das möglich ? – JimboTwice
Ja, ich denke nicht, dass das ein Problem sein sollte. Wenn Sie den neuen Datensatz mit "@ user.accounts.build" oder "@ user.accounts.create" zur Datenbank hinzufügen, wird der hinzugefügte Datensatz an die zwischengespeicherten Datensätze angehängt, ohne sie alle erneut zu laden. – DanneManne
Super, danke. Wir haben noch eine letzte Frage dazu: Ist es möglich, einen einzelnen Datensatz aus der Benutzertabelle zu laden und eager_load Konten für diesen einzelnen Benutzer? Wir können nicht bestimmen, wie wir das tun sollen: Wenn wir User.find_by_email ("[email protected]"), können wir nicht scheinen .eager_load zu nutzen. Ist es möglich, einen einzelnen Eintrag aus der Benutzertabelle zu laden und die Rechnungstabelle für diesen Eintrag zu laden? – JimboTwice