我写一个应用程序,将更新的最后一次有人登录到应用程序一点点更新,然后保存它。其在轨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