Ich bin auf einer Vereinigung eine find_by mit:Faking einem Datenbankeintrag für Active Record Methoden
"sub" eine viele zu einer Beziehung hat zu "main"
@main.subs.find_by(x: 123)
in den meisten Fällen möchte ich diese zuzugreifen und aus der Datenbank eine „sub“ Rekord in Bezug auf „main“, mit einem normalen Auswahl abrufen:
select subs.* from subs where subs.main_id = 333 and subs.x = 123
aber es gibt ein anderes Szenario, in dem ich es will, die Datenbank ignorieren und einen Stub ich zugreifen habe von "subs" erstellt unter „main“:
stub_sub = Sub.new(id: 22, x: 123, main_id: 333)
@main.subs << stub_sub
@main in der Datenbank entweder nicht gespeichert und wird erstellt, ebenso wie die Unter:
@main = Main.new(id: 333)
wenn ich auf die find_by Linie beim Debuggen erhalten, und versuchen, access @ mains, es sieht aus wie eine aktive Datensatzbeziehung, die ich von einer DB-Abfrage bekommen würde, aber wenn ich etwas wie find_by/all mache, versucht es, auf die db zuzugreifen und zu sehen, dass dort nichts ist und eine leere Relation zurückgibt.
Gibt es eine Möglichkeit, find_by (oder eine andere aktive Record-Methode) am Zugriff auf die Datenbank zu hindern und nur an der Stub-Beziehung zu arbeiten, die ich dafür erstellt habe?
Die Frage wurde basierend auf dem von Ihnen angegebenen Link aktualisiert. Von dem, was ich dort sehe, würden die Subs gespeichert werden, wenn das Haupt auch ein Datensatz in der DB wäre, aber in meinem Fall ist es nicht .. Ich stosse alles von Grund auf neu und möchte Datenbankeinträge nachahmen, um abzurufen. – Poster
OK, aktualisiert die Antwort. Noch eine Frage: Soll das in Tests verwendet werden? – BoraMa
Nein, ich wünschte .. dann könnte ich einfach die find_by stubben und damit fertig sein. Ich muss nur find_by konditionieren und es nur ausführen, wenn ich nicht den Stub verwenden soll, da die meisten Male Datensätze aus der db abrufen sollen, im Gegensatz zu nicht, und stattdessen eine Art hardcoded verwenden Aufzeichnung. – Poster