confronto tempo problemi con Rails
-
06-09-2019 - |
Domanda
Ho un compito molto semplice a portata di mano. Se l'ultima volta che un record è stato aggiornato è stato più di 15 minuti, visualizzare un pulsante. In caso contrario, non visualizzare il pulsante.
Il campo è un datetime.
Il mio codice vista:
<% if @object.display_button? -%>
my button
<% end -%>
Il mio metodo display tasto su tale oggetto:
def display_button?
return false if last_updated.nil?
if Time.now - last_updated > 15.minutes
true
else
false
end
end
Ho anche testato questa unità, che sono di passaggio, ma quando si tratta con l'attuazione, non sembra funzionare.
È la mia logica corretto o ci sarebbe un modo migliore di realizzare questo?
Soluzione
if last_updated < 15.minutes.ago
Il metodo minuti restituisce un intero Credo, e sottraendo oggetto tempo produce un altro oggetto tempo. Così la vostra espressione paragona un int ad un tempo e fa qualcosa che non ci si aspetta.
15.minutes.ago
produce un oggetto tempo che può essere direttamente confrontato con un altro oggetto tempo.
Inoltre, mai e poi mai fare if (something) return true; else; return false
in Ruby. Il vostro metodo restituirà il valore di tale ultima espressione eseguita in esso, in modo da poter semplificare enormemente che tutto il metodo:
def display_button?
last_updated && last_updated < 15.minutes.ago
end
Non è più facile da leggere?