Rails созданный запрос - PullRequest
       1

Rails созданный запрос

1 голос
/ 15 ноября 2011

В рельсах я сделал функцию (здесь у меня есть время формата 2011-09-01T14: 24: 09.090Z, идущий внутрь)

time = params[:time].sub!(/\..*/,'')
@pictures = Picture.all
finalPictures = []
@pictures.each do |picture|
date = picture.created_at
if date > time
  finalPictures.push(picture)
 end
end
@pictures = finalPictures

Это должно было найти все фотографии, сделанные после определенного времени. Это дало 4 результата (все сделано после), я заменил это запросом.

@pictures = Picture.where("created_at >= :time", {:time => time})

это, очевидно, должно найти все фотографии, сделанные после времени. Но это ничего не дает. если я заменю его на

@pictures = Picture.where("created_at <= :time", {:time => time})

Это дает надлежащие результаты, что здесь происходит. Я знаю, что кажется, что я должен просто использовать правильный метод, но это означает, что мне нужно изменить МНОГО запросов (что, я думаю, я не достаточно тестировал). Могу ли я получить такое поведение из-за моего формата времени, должен ли я изменить его по-другому (и как, если мне нужно)? или так работает функция create_at

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вас не должно беспокоить форматирование времени, поскольку объект, который вы передаете в запрос, должен иметь дату, время или дату.Если у вас нет одного из них, вам нужно настроить его на единицу:

time = DateTime.parse(params[:time])

Что касается того, почему ваше время не определено правильно, вы должны взглянуть на запрос, которыйсгенерированный и вошедший в систему log/development.log, чтобы увидеть, работает ли он правильно, когда выполняется сам по себе.

Вызов Picture.all, а затем повторение - действительно плохой способ сделать это, так как я уверен,понял, поэтому важно, чтобы запрос работал правильно.

0 голосов
/ 15 ноября 2011

Первое, что я делаю в подобных ситуациях, я иду в консоль rails и проверяю raw SQL.

Для этого установите в консоли рельсы:

ActiveRecord::Base.logger = Logger.new(STDOUT)

затем запустите ваш метод

Picture.where("created_at >= :time", {:time => time})

Тогда вы увидите, что происходит, потому что это должно сработать.

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