Schienen - wie zu verwenden reload-Methode?
Case1: Erstellen Sie einen neuen Datensatz für ein Modell mit der Zuweisung der zugehörigen Objekt(Status-Objekt statt Status.id) wie
visit = Visit.create(:date => Date.today, :status => Status.first)
visit.status_id #=> 1
Nach dem erstellen des Datensatzes
Ich versuche zu aktualisieren, wird das Attribut 'status_id' (Stand.id anstelle von Status-Objekt), aber es gibt den alten Wert sogar aufrufen erneut laden, nachdem das Objekt speichern. Beispiel:
visit.status_id = Status.last.id
visit.save
visit.reload
visit.status_id #=> 1
Wenn ich den Aufruf reload-Methode nach dem erstellen ist es wie erwartet funktioniert
visit = Visit.create(:date => Date.today, :status => Status.first)
visit.status_id #=> 1
visit.reload
visit.status_id = 2
visit.save
visit.status_id #=> 2
Case2: Wenn ich die Zuordnung der 'status_id' Wert anstelle des Status-Objekt, dann keine Notwendigkeit neu zu laden-Objekt und seine Arbeitsmethoden in Ordnung
visit = Visit.create(:date => Date.today, :status_id => Status.first.id)
visit.status_id #=> 1
visit.status_id = 2
visit.save
visit.status_id #=> 2
Mit den beiden Fällen oben, Wann sollte ich das reload
Methode? Sollte es vor oder nach save
?
InformationsquelleAutor nishanthan | 2012-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass Ihr Verständnis von, wie
save
undreload
Arbeit ist im wesentlichen richtig. Ihre Ergebnisse scheinen widersprüchlich. Ich habe ein Gefühl, das auf der Grundlage Ihrer Ergebnisse, dass Ihresave
versagt.save
werden versuchen, speichern Sie die lokale version der Datenbank. Es tut nicht aktualisieren, werden alle Werte aus der Datenbank, wenn das Modell geändert hat, seit Sie geladen haben. Wenn diesave
fehlschlägt, werden die lokalen Werte sind immer noch, was auch immer Sie legen Sie auf, aber die Datenbank alten Werte.reload
überschreibt alle lokalen änderungen, die Sie gemacht haben, und legt Sie in der Datenbank Werte.Vorausgesetzt, es gibt keinen Streit auf der Datenbank für die Modelle, die Sie besorgt sind, lassen Sie uns gehen Sie durch Ihre Beispiele.
Beispiel 1
Wenn die
save
funktioniert, dann diereload
wird nichts tun, und der Wert vonvisit.status_id
wirdStatus.last.id
. Allerdings, wenn diesave
fehlschlägt, dann wird der Wert vonvisit.status_id
werden, was auch immer es war, die in der Datenbank ursprünglich.Beispiel 2
Wenn die
create
funktioniert nicht, dann diereload
geben würdeRecordNotFound
Fehler, weil Sie nichtreload
etwas, das noch nicht gespeichert worden ist. Nach, dass Sie diestatus_id
2, dann rufen Siesave
. Ob diesave
erfolgreich ist oder fehlschlägt, wird der lokale Wert vonstatus_id
bleiben als 2. Jedoch, die Datenbank hängt davon ab, ob es erfolgreich war oder nicht.Beispiel 3
Hey! Dies ist die gleiche wie in Beispiel 2, außer für den laden.
Hier finden Sie einige Unterlagen, aber ich bin mir nicht sicher, wie hilfreich Sie Sie finden:
http://apidock.com/rails/ActiveRecord/Persistence/save
http://apidock.com/rails/ActiveRecord/Persistence/reload
Möchten Sie vielleicht zu prüfen, für
save
Erfolg oder rufen Siesave!
zu gewährleistensave
tatsächlich funktioniert.Ich hoffe, das hilft.
InformationsquelleAutor Geoff