【发布时间】:2013-09-26 12:36:21
【问题描述】:
我正在为一个应用程序编写一个小更新程序,它将在有人最后一次登录该应用程序时进行更新,然后保存它。它在 rails 3.2 和 ruby 1.9.3p327
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 进行比较会产生错误。你不能在 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 开始的天数的整数。那个日期是 excels nil 日期我希望 Ruby 的 nils 有一个默认日期。如果没有,您可以发表评论,不,没有对不起的人。在没有解释原因的情况下投反对票意味着您真的不关心帮助/教任何您只是在那里按下按钮的东西。如果我在这个问题上做错了,你可以告诉我,如果它没有意义,我会尝试修复它?
【问题讨论】:
-
为什么两行分配和保存。而是使用 update_attributes。
current_account.update_attributes(:last_login_at => Date.current)这样可以避免额外的显式保存调用。 update_attributes 会自动调用 save。检查这个maxivak.com/… -
我喜欢这样。谢谢,看起来好多了。链接也不错
-
没错,我会更新我的答案 - 另外,如果您有
after_save回调,您不必担心,因为创建和更新保存都会调用这些回调。
标签: ruby date comparison