我寫一個應用程序,將更新的最後一次有人登錄到應用程序一點點更新,然後保存它。其在軌3.2和紅寶石1.9.3p327紅寶石零轉換TO_DATE
def update_last_seen
if current_account.present?
if (Date.current - 1.day) > current_account.last_login_at
current_account.last_login_at = Date.current
current_account.save
end
end
end
我堅持認爲到應用程序控制器和濾波器之前與調用它。唯一的一點是,有時我的日期是零。因此比較日期和零給出錯誤。你無法在nil上調用to_date。
nil.to_f => 0.0
nil.to_i => 0
nil.to_s => ""
nil.to_date => NoMethodError: undefined method `to_date' for nil:NilClass
"2013/07/26".to_date => Fri, 26 Jul 2013
我怎麼可以把它設置爲它是它被接受爲一個空的日期。
我總是可以做
if current_account.last_login_at.blank? || (Date.current - 1.day) > current_account.last_login_at
這樣,如果它不存在,將它設置,但有沒有做這件事的語義的方式?
更新:
您可能認爲這沒有意義。我問的原因是因爲有些引擎的日期爲零。例如excel會以兩種方式返回日期1.作爲"06/12/2013"
中的文本或2.從01/01/1900開始的整數。該日期是擅長的nil
日期我希望有一個Ruby的nils的默認日期。如果沒有,你可以只是評論nope沒有抱歉的人。爲什麼意味着你真的不在乎幫助/教導任何你只是在推擠按鈕的事物而沒有給出解釋。如果我在這個問題上做了錯誤的事情,你可以告訴我,試着修復它,如果它沒有意義?
爲什麼兩行分配和保存。而是使用update_attributes。 'current_account.update_attributes(:last_login_at => Date.current)'這樣可以避免額外的顯式保存調用。 update_attributes將自動調用保存。檢查這個http://maxivak.com/update_attribute-and-update_attributes-ruby-on-rails/ –
我喜歡那樣。謝謝,看起來好多了。很好的鏈接以及 – TheLegend
真,我會更新我的答案 - 也,你應該不用擔心,如果你有'after_save'回調,因爲那些被調用兩個創建和更新保存。 – Momer