2016-07-01 15 views
0

Zu Demonstrationszwecken: sagen, dass ich in dem Modul TodayDynamicDate in das Modell am einschließlich Foo unter:Rails dynamisch heutigen Datum zur Laufzeit zurückgeben

# app/models/concerns/today_dynamic_date.rb 
module TodayDynamicDate 
    extend ActiveSupport::Concern 

    def todays_date 
    Date.today 
    end 
end 

#app/models/foo.rb 
class Foo < ApplicationRecord 
    include TodayDynamicDate 
end 

Ich frage mich, ob in der Methode von #todays_date, dass gemischte Verwendung funktioniert, wie ich will es.

Ich möchte, dass die Methode #todays_date das Datum, an dem die Methode ausgeführt wurde, dynamisch zurückgibt. Ich möchte nicht, dass das statische Datum zurückgegeben wird, an dem der Rails-Server gestartet wurde.

Beispiel:

sagen, dass ich heute den Server booten, Friday, July 1st, 2016. Hier ist, was erwarte ich, dass die Methode heute zurückzukehren:

Foo.new.todays_date 
    => Fri, 01, Jul 2016 

Der Server läuft weiter und es ist jetzt Tuesday, July 5th, 2016. Das gleiche Verfahren wird in der App genannt und hier ist das, was ich erwarten zurückzukehren:

# dynamically returning the date that the method was called 
Foo.new.todays_date 
    => Tues, 05, July 2016 

ich, dass es diese wird nicht Rückkehr sicherstellen wollen:

# returning a static date 
Foo.new.todays_date 
    => Fri, 01, Jul 2016 

Frage: Will meine Implementierung einen dynamischen Datum zurückgeben? Wenn es kein dynamisches Datum zurückgibt: Wie würde ich das mit dieser eingemischten Methode todays_date machen?

Antwort

2

Antwort ist ja. Jeder Anruf an Date.today wird das aktuelle Datum zurückgeben.

todays_date ist keine Klasse (was Sie als statische Variable bezeichnen) Variable, es ist eine Methode.

+0

Vielen Dank für Ihre Antwort. Also sagst du, wenn 'todays_date' eine Klassenmethode wäre, dann würde es ein statisches Datum zurückgeben? – Neil

+1

Eine Methode, entweder eine Klassen- oder Instanzmethode, gibt immer das aktuelle Datum und nicht einen alten zwischengespeicherten Wert zurück. Wenn Sie eine Klassenvariable verwenden würden, d. H. Wenn Sie "@@ today = todays_date" und "@@ today" in Ihrem Code verwendet hätten, stünden Sie in Schwierigkeiten –

Verwandte Themen