gpt4 book ai didi

date - 如何让我的模型接受两种不同的日期格式?

转载 作者:行者123 更新时间:2023-12-04 16:06:09 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 5。我的模型中有以下代码......

class User < ActiveRecord::Base
...
attr_accessor :dob_string

def dob_string
@dob_string || (self.dob ? self.dob.strftime('%m/%d/%Y') : "")
end

def dob_string=(dob_s)
date = dob_s && !dob_s.empty? ? Date.strptime(dob_s, '%m/%d/%Y') : nil
self.dob = date
rescue ArgumentError
errors.add(:dob, 'The birth date is not in the correct format (MM/DD/YYYY)')
@dob_string = dob_s
end

尽管有我的指示,有时用户还是以 MM-DD-YYYY 的形式输入日期。所以我想要做的是让我的模型接受两种格式,MM/DD/YYYY 或 MM-DD-YYYY,但不能混合,即 MM/DD-YYYY 仍然是非法的。如何修改我的模型以使其可以接受任一格式?

最佳答案

我认为这可能会满足您的需求:

class User < ActiveRecord::Base
def dob_string
@dob_string || (dob ? dob.strftime("%m/%d/%Y") : "")
end

def dob_string=(dob_s)
unless convert_preferred_date(dob_s) || convert_acceptable_date(dob_s)
errors.add(:dob, 'The birth date is not in the correct format (MM/DD/YYYY)')
@dob_string = dob_s
end
end

private

def convert_preferred_date(dob_s)
convert_date(dob_s, "%m/%d/%Y")
end

def convert_acceptable_date(dob_s)
convert_date(dob_s, "%m-%d-%Y")
end

def convert_date(dob_s, format)
self.dob = (dob_s && !dob_s.empty? ? Date.strptime(dob_s, format) : nil)
rescue ArgumentError
nil
end
end

这有点不雅,但我想不出只做两种日期格式的方法。如果您准备接受任何人类可读的数据格式,则有一种更简单的方法可以做到这一点。

请在您自己的应用程序中对此进行彻底测试。我只是在 Rails 控制台中处理这个问题,我可能没有测试过所有情况。希望这会有所帮助。

关于date - 如何让我的模型接受两种不同的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374050/

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