2015-07-28 5 views
11

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?

+0

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

Antwort

21

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.

+4

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. –

+1

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

10

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!

0

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.