Schienen erstellen oder aktualisieren Magie?
Habe ich eine Klasse namens CachedObject
speichert generische für serialisierte Objekte indiziert. Ich will diese Klasse zu implementieren, die eine create_or_update
Methode. Wenn ein Objekt gefunden wird, wird es aktualisiert, ansonsten wird eine neue erstellen.
Gibt es eine Möglichkeit, dies zu tun Schienen, oder muss ich schreiben, dass meine eigene Methode?
InformationsquelleAutor der Frage kid_drew | 2013-09-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht, wenn Sie sich für eine "upsert" (wo die Datenbank führt eine update-oder eine insert-Anweisung in der gleichen operation) Art der Erklärung. Out of the box, Rails und ActiveRecord haben keine solche Funktion. Sie können die upsert Juwel jedoch.
Sonst, die Sie verwenden können:
find_or_initialize_by
oderfind_or_create_by
, die bieten ähnliche Funktionalität, allerdings auf Kosten eines zusätzlichen Datenbank-Treffer, die in den meisten Fällen, ist das kaum ein Problem überhaupt. So, es sei denn, Sie haben ernsthafte Leistung betrifft, würde ich nicht verwenden, die gem.Beispielsweise, wenn kein Benutzer gefunden wurde mit dem Namen "Roger", eine neue user-Instanz instanziiert ist mit seinen
name
"Roger".Alternativ können Sie
find_or_initialize_by
.In Rails 3.
Können Sie einen block, aber der block wird nur ausgeführt, wenn der Datensatz neu ist.
Wenn Sie möchten, verwenden Sie einen block, unabhängig von der Datensatz-Persistenz, Nutzung
Tippen
auf das Ergebnis:InformationsquelleAutor der Antwort Mohamad
In Rails 4 kann man hinzufügen, um eine bestimmte Modell:
und verwenden Sie es wie
Oder wenn Sie möchten, fügen Sie diese Methoden, um alle Modelle in einem Initialisierer:
InformationsquelleAutor der Antwort montrealmike
Fügen Sie diese zu Ihrem Modell:
Damit können Sie:
InformationsquelleAutor der Antwort Karen
Können Sie tun es in einer Anweisung wie dieser:
InformationsquelleAutor der Antwort Rajesh Kolappakam
Alte Frage, sondern wirft meine Lösung in den ring für die Vollständigkeit.
Ich brauchte diese, wenn ich Sie brauchte eine bestimmte finden, aber eine andere erstellen wenn es nicht vorhanden ist.
InformationsquelleAutor der Antwort Aeramor
Den Fortsetzung gem fügt eine update_or_create Methode, die scheint zu tun, was du bist suchen für.
InformationsquelleAutor der Antwort KurtPreston