【问题标题】:Why is my Model.where() returning a blank array (when I'm sure there are matches)?为什么我的 Model.where() 返回一个空白数组(当我确定有匹配项时)?
【发布时间】:2013-05-16 23:01:30
【问题描述】:

我做错了什么,从这个命令给了我一个空白数组?

Item.where(:load_date => Date.today + 2)

这是我的 Rails 控制台:

.9.3-p194 :024 > Item.first.load_date
Item Load (0.3ms)  SELECT "items".* FROM "items" LIMIT 1
=> Fri, 24 May 2013 
1.9.3-p194 :025 > Item.where(:load_date => Date.today + 2)
Item Load (0.5ms)  SELECT "items".* FROM "items" WHERE "items"."load_date" = '2013-05-24'
=> []
1.9.3-p194 :026 > Item.first.load_date == Date.today + 2
Item Load (0.3ms)  SELECT "items".* FROM "items" LIMIT 1
=> true 

物品型号:

... 
#  load_date       :date
...

class Item < ActiveRecord::Base
attr_accessible :bt_num, :dept, :formula, :item_code, :load_date, :prod_comments, :qc_comments, :qc_tech, :qty_in_kg, :qty_in_liters, :rm_ok_by, :series, :status, :time_to_produce, :vat
...

【问题讨论】:

  • 数据库中load_date的值是多少?
  • 你的数据库是什么?我已经在 mysql 上进行了测试,它有效
  • 数据库是 sqlite3。 Item.first.load_date == Fri, 24, May 2013 and class is 'Date'
  • stackoverflow.com/a/1474238/976775 可能会有所帮助
  • 这不是数据库,我在 Postgres、Mysql 和 Sqlite 上测试过,效果很好。也许它与时区有关?试试Item.where(:load_date =&gt; Date.today + 1)Item.where(:load_date =&gt; Date.today + 3) 看看还是不行

标签: ruby-on-rails


【解决方案1】:

试试这些

Item.where(:load_date => (Date.today + 2).strftime)
  or 
Item.where("Date(load_date) =?", (Date.today + 2).strftime)

【讨论】:

  • 第二个有效,但第一个无效(第一个仍然返回空白)。为什么日期的格式很重要?为什么第一个不起作用??
  • load_date 是 datetime 的列,但我们只想要从那里的 Date 所以我使用 Date(load_date).... 和 strftime 使用,因为它会将 (Date.today+2) 转换为格式 " 2013-05-24”和数据库中的值保存为“2013-05-24 12:12”而不是“fridat May 24, 2013”​​
  • 为什么 Item.first.load_date 不显示“2013-05-24 12:12”而不是“2013 年 5 月 24 日星期五”?当我检查 Item.first.load_date 的类时,它也是“日期”。感谢您的帮助,我只是想了解发生了什么。
  • 然后试试这个... Item.where("load_date=?", (Date.today + 2).strftime)
猜你喜欢
  • 2012-02-18
  • 2017-07-25
  • 2022-01-09
  • 1970-01-01
  • 2015-05-25
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多