Ruby on rails Rails 2.3.5-";。查找“;函数不';t使用(:condition=>;“date”选项工作
我想做的是查找过去60天内使用过的特定记录 我正在使用Oracle(9i), 轨道v:2.3.5, Ruby v:1.8.7 我定义日期间隔的代码是:Ruby on rails Rails 2.3.5-";。查找“;函数不';t使用(:condition=>;“date”选项工作,ruby-on-rails,ruby,oracle,date,conditional-statements,Ruby On Rails,Ruby,Oracle,Date,Conditional Statements,我想做的是查找过去60天内使用过的特定记录 我正在使用Oracle(9i), 轨道v:2.3.5, Ruby v:1.8.7 我定义日期间隔的代码是: date =(((Time.now - 60.days).strftime("%d-%b-%y"))...(Time.now.strftime("%d-%b-%y"))) 下面是我如何使用它: conditions = {} conditions[:start_date] = date conditions[:account_no] = acc
date =(((Time.now - 60.days).strftime("%d-%b-%y"))...(Time.now.strftime("%d-%b-%y")))
下面是我如何使用它:
conditions = {}
conditions[:start_date] = date
conditions[:account_no] = account_number
results = MyModel.find(:all, :conditions => conditions)
要查看所选内容,我基本上要执行以下操作:
results.each {|r|
if (!(r.column_name.nil?))
#do something here
end
}
结果:
代码正在运行,但“结果”为空
但是,当我将“MyModel.find…”生成的查询复制并粘贴到sqlDeveloper时,我可以明确地看到我想要的内容
虽然我使用了由上述代码生成的相同查询,但我不能使用SQL Developer获得相同结果的原因是什么?如果开始日期是一个日期
date =((DateTime.now - 60)...(DateTime.now))
conditions = {}
conditions[:start_date] = date
conditions[:account_no] = account_number
results = MyModel.find(:all, :conditions => conditions)
这将使日期成为一个日期范围,而不是字符串范围
现在,如果运行date.to_a,它将返回一个空数组,因为它的范围不正确
如果您使用date.to_a运行上述程序,它将返回一个日期数组,返回的日期不包括今天的日期。这将在生成的SQL中创建一个适当的
IN
语句,取出strftime
s,并传递原始时间值。Rails非常擅长将任何内容转换为正确的数据库格式。我不相信这是有效的,谢谢。。但我仍然无法理解生成的查询是如何工作的,但代码不是。。再次感谢您为什么要通过缩写月份%b
?这就是数据的存储方式吗?通常Rails将日期存储为%Y-%m-%d
您传递的是一系列字符串,而不是日期。数据库将日期存储为(例如:“11-Oct-13”),这就是我使用strftime的原因。问题现在解决了,我只是生气,因为rails生成的查询正在工作,所以我从来没有想过删除strftime。