gpt4 book ai didi

Ruby nil 转换为_date

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:39 25 4
gpt4 key购买 nike

我正在为一个应用程序编写一个小更新程序,它将在有人最后一次登录该应用程序时进行更新,然后保存它。它在 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

我将其插入到应用程序 Controller 中并使用前置过滤器调用它。唯一的问题是有时我的日期为零。所以将 date 与 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 开始的天数的整数。该日期优于 nil 日期 我希望 Ruby 的 nils 有一个默认日期。如果没有,你可以评论不,没有抱歉的人。在不解释原因的情况下投反对票意味着你真的不关心帮助/教授任何你只是在那里按下按钮的东西。如果我在这个问题上做错了什么,你可以告诉我我会尝试修复它,如果它没有意义?

最佳答案

您可以添加另一种方法来稍微清理代码。

def new_login_since?(last_login)
last_login.blank? || (Date.current - 1.day) > last_login
end

def update_last_seen
if current_account.present? && new_login_since?(current_account.last_login_at)
current_account.update_attributes { last_login_at: Date.current }
end
end

关于Ruby nil 转换为_date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com