操作日期以获取带有rails的当前文档



我有一个名为Document的模型,如果当前日期介于文档的start_dateend_date之间,则文档是有效的。我正试图定义一个返回当前活动文档的方法,但由于end_date可能为零,我遇到了一些问题。我有

def current_valid_document
Document.where('start_date <= ? AND end_date >= ?', Date.today, Date.today).first
end

但是该方法失败了,例如以下文档

文件A,开始日期:2022年1月1日,结束日期:2022年12月31日

文件B,开始日期:2023年1月1日,结束日期:无

自今天(2022年3月1日(起,这将返回文件A,但在2023年1月1日,由于文件B的end_date为零,这将不返回任何内容。

如果我添加

def current_valid_document
Document.where('start_date <= ? AND end_date >= ?', Date.today, Date.today)
.or(Document.where(end_date: nil).first
end

该方法将失败,因为它返回多个文档而不是当前文档。

即使end_date可以为零,我如何操作日期以始终获得当前有效文档?

您可以检查end_date是否大于X日期或为NULL。但是or不起作用,因为它在不考虑包装条件的情况下附加了OR子句。

您可以尝试start_date <= ? AND (end_date >= ? OR end_date IS NULL)

Document.where(
'start_date <= :date AND
(end_date >= :date OR end_date IS NULL)',
date: Date.new(2023, 1, 1)
)

最新更新