рельсы 2.3.4, sqlite3
Я пытаюсь это
Production.find (: все,: условия => ["время>?",
start_time.utc],: order => "time DESC",
: предел => 100)
Условие работает отлично, но у меня проблемы с : order => time DESC .
Случайно я обнаружил, что он работает на Heroku (тестирование с консолью heroku), которая запускает PostgreSQL. Однако локально, с использованием sqlite3, новые записи будут отсортированы по старым, независимо от того, какое значение я установил для time . Вот так ( вывод был удален вручную ): вторая запись новая:
Идентификатор производства: 2053939460, время: "2010-04-24 23:00:04", create_at: "2010-04-24 23:00:05"
Идентификатор производства: 2053939532, время: "2010-04-25 10:00:00", create_at: "2010-04-27 05:58:30"
Идентификатор производства: 2053939461, время: "2010-04-25 00:00:04", create_at: "2010-04-25 00:00:04"
Идентификатор производства: 2053939463, время: "2010-04-25 01:00:04", create_at: "2010-04-25 01:00:04"
Похоже, что сортируется по первичному ключу, id , а не time . Обратите внимание, что запрос отлично работает на герою, возвращая правильно упорядоченный список! Мне нравится sqlite, это так ПОЦЕЛУЙ, надеюсь, ты поможешь мне ...
Есть предложения?
UPDATE / РЕШИТЬ:
time - зарезервированное ключевое слово sqlite3 ( date , среди прочего, тоже). Вот почему :order => 'time DESC'
работает в PostgreSQL ( незарезервированное ключевое слово ), но не в sqlite3. Решение состоит в том, чтобы избежать использования ключевых слов sqlite3 в качестве имен столбцов, если вы когда-либо намереваетесь сортировать их. Переименование решает проблему.
Я протестировал со стандартным шаблоном рельсов updated_at и create_at , который отлично работает.
Я все еще предпочитаю sqlite3 в разработке, с ним так просто и гладко работать, копировать базу данных и отправлять партнеру. Благодаря @newtover!