Ruby on rails Rails 2.3.5-";。查找“;函数不';t使用(:condition=>;“date”选项工作

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

我想做的是查找过去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] = 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。