レール 2.3.4、sqlite3
私はこれを試しています
Production.find(:all, :conditions => ["time > ?", start_time.utc], :order => "time DESC", :limit => 100)
条件は完全に機能しますが、:order => time DESCに問題があります。
たまたま、PostgreSQL が動作する Heroku (heroku コンソールでテスト中) で動作することを発見しました。ただし、ローカルで sqlite3 を使用すると、時間の設定に関係なく、新しいエントリは古いエントリの後に並べ替えられます。このように (出力は手動で削除されました): 2 番目のエントリは新しいものです:
プロダクション 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"
timeではなく、主キーidでソートされるようです。クエリはherokuで正常に機能し、正しい順序のリストを返すことに注意してください! 私はsqliteが好きです、それはとてもKISSです、あなたが私を助けてくれることを願っています...
助言がありますか?
更新/解決済み:
timeは予約済みの sqlite3 キーワードです ( dateなどもそうです)。これが:order => 'time DESC'
、PostgreSQL (予約されていないキーワード) では機能するのに、sqlite3 では機能しない理由です。解決策は、ソートする予定がある場合に列名として sqlite3 キーワードを使用しないようにすることです。名前を変更すると問題が解決します。
私は完全に動作する標準的なレール パターンupdated_atとcreated_atでテストしました。
私はまだ開発中の sqlite3 を好みます。操作がとてもシンプルでスムーズで、データベースをコピーしてパートナーに送信できます。@newtover に感謝!