Ich habe gehört, dass Rails 'ActiveRecord/ActiveModel etwas namens "touch" hat. Ich habe jedoch nichts gefunden, das den Zweck dieser Funktionalität beschreibt.In ActiveRecord von Rails, wofür ist Touch?
Was macht es, und wofür ist es nützlich?
Ich habe gehört, dass Rails 'ActiveRecord/ActiveModel etwas namens "touch" hat. Ich habe jedoch nichts gefunden, das den Zweck dieser Funktionalität beschreibt.In ActiveRecord von Rails, wofür ist Touch?
Was macht es, und wofür ist es nützlich?
Gemäß der API Documentation ist es eine Methode, die nur die angegebenen Zeitstempel des Modells mit der aktuellen Zeit aktualisiert. Also, um das updated_at
Feld zu aktualisieren:
product.touch
oder die updated_at
und designed_at
Felder zu aktualisieren:
product.touch(:designed_at)
Nun, ich habe diese Methode noch nie benutzt, aber ich denke, es wäre wäre nützlich in einer Situation, in der eine Frage (wie bei "Stack Overflow") an den Anfang einer Suchanfrage gestellt wird, ohne dass der Inhalt geändert wird.
Ich glaube, sie haben den Namen von der Befehlszeile Dienstprogramm ['touch (1)'] (http://man7.org/linux/man-pages/man1/touch.1.html), die eine Datei geändert an aktualisiert Metadatenfeld. –
Beachten Sie, dass, während die Berührung die Datenbankzeile des Objekts ändert, auf dem sie verwendet wird, die meisten normalen Rails-Rückrufe nicht ausgelöst werden. Die einzigen Callbacks, die ausgelöst werden, sind 'after_touch',' after_commit' und 'after_rollback'. 'before_validation',' after_save' usw. werden nicht ausgeführt, nachdem ein Modell berührt wurde. Stellen Sie daher sicher, dass Sie keine Logik benötigen, wenn Sie touch verwenden. – whognu
Hinzufügen zu Ryans Antwort, vergessen Sie nicht berühren in Ihren Modellen zu verwenden, wie so:
class Book < ActiveRecord::Base
belongs_to :library, touch: true
end
Nun, wenn Sie ein Buch in der Bibliothek hinzufügen, die updated_at
Zeit der Bibliothek wird die Zeit, die neueste Buch widerspiegeln wurde hinzugefügt! Bonus!
Dies ist nützlich, wenn Sie ein Front-End-Framework wie Flux (Alt/Redux) oder Async-Aufrufe an den Server verwenden, um Ihr Modell zu aktualisieren. Bei mehreren API-Aufrufen, die an Ihren Server gesendet wurden, habe ich ihn verwendet, um zuerst das "updated_at" -Timing eines Modells zu überprüfen, bevor Sie speichern oder validieren. Als nächstes können Sie mit 'touch' das Feld 'updated_at' entsprechend aktualisieren.
Nur verwendet, um ein Modell zu "bearbeiten", so dass Sie wissen, wann es zuletzt in einem relevanten Kontext verwendet wurde. Z.B. Aktualisieren eines Benutzers bei der Anmeldung, damit Sie wissen, wann sie zuletzt vorbeigekommen sind. – tyler