我无法比较rails 2项目中的日期。在我的一个查询中,其中一个条件是:
:conditions => ["bills.created_at >= #{beginning.to_s.delete("-")} AND bills.created_at <= #{ending.to_s.delete("-")}"]
我分别为"2013-10-16"
和"2013-12-15"
传递了beginning
和ending
。这在我的暂存环境中起作用,但在我的生产环境中被破坏了:
ActiveRecord::StatementInvalid: PGError: ERROR: operator does not exist: timestamp without time zone >= integer
LINE 1: SELECT * FROM "bills" WHERE (created_at >= 20131016)
我该如何解决这个问题?我看到了heroku Postgres error - operator does not exist timestamp without timezone = integer,但没有帮助。
答案 0 :(得分:1)
您的查询肯定离ActiveRecord查询语法很远。假设您至少使用Rails 3,beginning
和ending
是时间对象:
Bill.where("created_at >= ? AND created_at <= ?", beginning, ending)
或者您也可以使用BETWEEN
传递Ruby Range
Bill.where(created_at: beginning..ending)
请避免像您刚才那样在查询中插值。生成的查询不受SQL注入保护。
您可能还想查看ActiveRecord文档,以便了解如何正确使用它。
对于Rails&lt; 3你应该将条件传递给find方法。
Bill.find(:all, :conditions => "created_at >= ? AND created_at <= ?", beginning, ending)