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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top