I’d like to search for invoices in the database, having the date range
set (from, to). The problem is that invoices whose issue dates match the
‘from’ or ‘to’ dates will not show up in results.
For example:
Created an invoice today (“2009-02-09”), and I’m searching by issue_date
between from and to, these are the params:
The scope gets a filter object that has both ‘from’ and ‘to’ fields set.
If I set the ‘to’ field to tomorrow’s date, then the invoice will
appear, but I don’t understand why it wouldn’t work as is since there
are ‘<=’ & ‘>=’ comparisons in conditions.
…
require ‘time’
…
invoices = Invoice.find(:all, :conditions=>[‘issue_date is not null
and (issue_date >= ? or issue_date <= ?)’, Time.parse(‘2009-02-09
00:00:00’), Time.parse(‘2009-02-09 23:59:59’)] :order=>‘issue_date’)
…
Jeff
Thanks for your reply, and your help! It gave me a hint and solved the
problem like this:
self.cond << [“invoices.issue_date > ?”, from - 1] unless from.blank?
self.cond << [“invoices.issue_date < ?”, to + 1] unless to.blank?
because issue_date is a datetime, and generating an invoice means saving
both date and time of the day. This way the search will have the same
results as in your example.
Is the issue date a date column or a datetime column ?
if you have a datetime column containing 2009-02-09 14:00 and compare
it to 2009-02-09 then the 2009-02-09 is turned into 2009-02-09 00:00
which can mess things up for you.