为什么会返回null

时间:2011-03-24 03:09:22

标签: ruby-on-rails ruby date

我有这个属于某个位置的请求

>> r = Request.find 11210  
=> #<Request id: 11210, artist: "Coldplay", song: "Amsterdam", venue: "someplace", showdate: "2011-02-23", amount: nil, user_id: 11, created_at: "2011-02-23 02:55:13", updated_at: "2011-03-24 02:55:13", like_reason: "Its Great", pledge: #<BigDecimal:1032f1850,'0.29E2',9(18)>, location_id: 243, charge_card: false, approval_key: nil, charged: false, paypal_email: "coldpl_1300920081_per@gmail.com">
>> r.location.showdate
=> Wed, 23 Feb 2011
>> r.showdate
=> Wed, 23 Feb 2011
>> Request.find_all_by_showdate(r.location.showdate)
=> []
>> 

它们都是数据库中的日期字段......

我目前正在使用sqlite,如果它有所作为

2 个答案:

答案 0 :(得分:0)

在处理日期/日期时,我通常会以.to_s(:db)格式化日期,以便在查询中很好地发挥作用。我不确定这是否是你问题的根源,但这就是我要开始的地方。

答案 1 :(得分:0)

如果您查看Request.find 11210的“原始”输出,您会看到:

showdate: "2011-02-23"

虽然这不是r.location.showdate但它应该给你一个提示。试试这个:

Request.find_all_by_showdate('2011-02-23')

如果可以,那么你就会遇到格式问题。

请记住SQLite stores everything as a string在内部,它接受列定义中的常用数据类型,但内部的所有内容都是字符串;所以,在某个地方,SQLite驱动程序会说:

r.location.showdate.to_s

并获取

'Wed, 23 Feb 2011'

然后它将在showdate列中查找该字符串,但由于showdate包含ISO-8601 format中的日期,因此无法找到该字符串。