2009-02-24 36 views
1

我有一個非常簡單的任務。如果記錄上次更新時間超過15分鐘,則顯示一個按鈕。否則,不要顯示按鈕。Rails的時間比較問題

該字段是日期時間。

我的視圖代碼:

<% if @object.display_button? -%> 
    my button 
<% end -%> 

該對象上的我的顯示按鈕的方法:

def display_button? 
    return false if last_updated.nil? 
    if Time.now - last_updated > 15.minutes 
    true 
    else 
    false 
    end 
end 

我也有這個單元測試,這是通過,但是當涉及到的實現中,它似乎沒有工作。

我的邏輯是正確的還是會有更好的方法來完成這個?

回答

7
if last_updated < 15.minutes.ago 

minutes方法返回一個整數,我相信,並減去時間對象產生另一個時間對象。所以你的表達將一個int與一個時間進行比較,並做一些你不期望的事情。

15.minutes.ago產生一個可以直接與另一個時間對象比較的時間對象。


此外,永遠不會做紅寶石if (something) return true; else; return false。你的方法將返回在它執行的最後一個表達式的值,這樣可以大大簡化整個方法:

def display_button? 
    last_updated && last_updated < 15.minutes.ago 
end 

是不是更容易閱讀?

+0

是`last_updated`時間對象嗎?我假設它是。轉到腳本/控制檯並輸入「15.minutes.ago」,你應該得到一個時間對象,如「Tue,2009年2月24日16:46:05 UTC +00:00」。所以請確保last_updated也是一個時間對象。查看Time#since和Time#直到計算這些值。 – 2009-02-24 17:11:03