gpt4 book ai didi

ruby-on-rails - 如果将日期时间列转换为日期 (rails),则不在失败的地方

转载 作者:行者123 更新时间:2023-11-29 13:32:03 26 4
gpt4 key购买 nike

当我尝试搜索不是在特定日期创建的记录时,查询中从日期时间到日期的转换失败

>> some_days = [Date.parse("2013-12-25"), Date.parse("2013-12-31")]
=> [Wed, 25 Dec 2013, Tue, 31 Dec 2013]
>> User.where.not("DATE(created_at)" => some_days)

错误:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column users.DATE(created_at) does not exist

这似乎不是正确的 Rails 行为。目前,我的解决方法是这样,但我想知道执行此操作的正确方法。

>> User.where("DATE(created_at) not in (?)", some_days + [Date.new])

如果日期数组为空,则此解决方法不起作用,这就是我向其添加 Date.new 的原因。

最佳答案

尝试简单:

User.where.not(created_at: some_days)

这足以处理空数组的情况(将 where 1=1 添加到语句中)

更新:

我终于明白问题出在哪里了,有一个正确的解决方案。

class User
scope :not_created_at, ->(dates) { where.not(created_at: Array.wrap(dates).map {|date| date..(date + 1.day)} ) }

end

User.not_created_at(some_days)

# Executed query
# SELECT "users".* FROM "users" WHERE (NOT ((("users"."created_at" BETWEEN '2013-12-25' AND '2013-12-26' OR "users"."created_at" BETWEEN '2013-12-31' AND '2014-01-01') OR 1=0)))

关于ruby-on-rails - 如果将日期时间列转换为日期 (rails),则不在失败的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056783/

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