Rails / ActiveRecord: получить запись сделанную * ПОСЛЕ * определенной даты - PullRequest
1 голос
/ 20 октября 2010

Так что в настоящее время у меня есть проблема, когда я заполняю базу данных из XML-файлов через API моего клиента. Каждая запись имеет дату истечения срока действия в следующем формате:

<offer_ends_at>2010-10-20T07:59:59-04:00</offer_ends_at>

Теперь мне нужно выполнить запрос, в котором я получаю только те записи, срок действия которых истекает в будущем. Мой текущий код:

@deals = Deal.where(["city = :city AND status = 'live' AND DATETIME(date_expires) >= DATETIME(:time)", { :city => @city.id, :time => Time.now }])

И когда я делаю запись, я использую это:

@deal.date_expires = DateTime.parse((entry/"offer_ends_at").inner_html)

И вот как я получаю дату и время и форматирую ее.

Вот где я нахожусь:

  1. Кажется, я не могу получить дату, чтобы перейти в базу данных без проблем. Если я использую приведенный выше код и для схемы задан тип столбца: datetime или: time, это дает мне дату 2000-01-01 и никакого действительного времени. В буквальном смысле фактическая дата не устанавливает ничего похожего на то, что было дано.
  2. Я преобразовал тип столбца в: строку и попытался использовать это. Теперь я могу правильно ввести дату (строку), но в то же время не могу заставить работать приведенный выше запрос.

Мне просто нужно убедиться, что я показываю только те записи, срок действия которых не истек. После двух дней поиска в сети и отсутствия рабочих ответов я решил спросить здесь. Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Ответ в том, что мой код на самом деле не был плохим.Проблема, которая возникла, заключалась в том, что я неправильно отформатировал введенную дату, чтобы ее можно было понять при выполнении запроса.Простое изменение моего запроса с Time.now на Time.now.parse сработало.

0 голосов
/ 19 февраля 2015

ActiveRecord встроен поверх библиотеки Arel, поэтому мы можем использовать его для более явного запроса.

t = Deal.arel_table @deals = Deal.where(city: @city.id, t[:time].gt(1.second.ago))

Это должно получить все сделки в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...