导轨 2.3.4,sqlite3
我正在尝试这个
Production.find(:all, :conditions => ["time > ?", start_time.utc], :order => "time DESC", :limit => 100)
条件完美,但我遇到了:order => time DESC的问题。
一次偶然的机会,我发现它可以在运行 PostgreSQL 的 Heroku(使用 heroku 控制台进行测试)上工作。但是,在本地,使用 sqlite3,新条目将在旧条目之后排序,无论我设置什么时间。像这样(输出已被手动剥离):第二个条目是新的:
生产id:2053939460,时间:“2010-04-24 23:00:04”,created_at:“2010-04-24 23:00:05”
生产id:2053939532,时间:“2010-04-25 10:00:00”,created_at:“2010-04-27 05:58:30”
生产id:2053939461,时间:“2010-04-25 00:00:04”,created_at:“2010-04-25 00:00:04”
生产id:2053939463,时间:“2010-04-25 01:00:04”,created_at:“2010-04-25 01:00:04”
似乎它按主键id排序,而不是time。请注意,查询在 heroku 上运行良好,返回正确排序的列表!我喜欢sqlite,它是如此的KISS,希望你能帮助我...
有什么建议么?
更新/解决:
time是一个保留的 sqlite3 关键字(date等也是)。这就是为什么:order => 'time DESC'
在 PostgreSQL(非保留关键字)中有效,但在 sqlite3 中无效的原因。如果您打算对它们进行排序,解决方案是避免将 sqlite3 关键字作为列名。重命名解决了这个问题。
我已经使用标准 rails 模式updated_at和created_at进行了测试,效果很好。
在开发中我还是更喜欢 sqlite3,它使用起来非常简单流畅,复制数据库并发送给您的合作伙伴。感谢@newtover!