2016-09-21 2 views
0

У меня проблема с сопоставлением в Ruby on Rails. Я хочу проверить, является ли полное имя последними 3 обновленными записями в базе данных. По какой-то причине он проверяет всю базу данных.Rails - Сравнение последних 3 обновленных записей модели

if Playlist.where(fullname: @last_fullname).order(updated_at: :desc).limit(3).exists? 
    puts "records exists in last 3 updated records" 
else 
    puts "record not found" 
end 

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

EDIT: ожидаемый результат состоит в том, что когда запись не обновляется в течение последних 3, она должна указывать «запись не найдена». Если запись находится в течение последних 3 обновлений, она должна указывать «запись в последних 3 обновленных записях».

Что я получаю, когда в базе данных существует @last_fullname, так это то, что он всегда будет давать «записи в последних 3 обновленных записях», хотя это не в последних трех обновлениях.

Я получаю «запись не найдена», когда она не выходит в базу данных.

Любая идея?

+0

, пожалуйста, покажите нам фактический результат и ожидаемый результат. – davidhu2000

+0

Вы должны искать 'full_name' вне 3 последних запросов записи, а не в предложении' where'. – d34n5

ответ

4

Вы можете достичь этого на уровне базы данных только с помощью подзапросов: выберите последние 3 записи и из последних трех записей найдите полное имя. То, что делает ваш пример запроса, - это поиск всех записей с заданным полным именем и сортировка по обновленному_at. Учитывая, что вам требуется только 3 записи, вы можете сделать это в пользовательском пространстве:

Playlist.order(updated_at: :desc).limit(3).any?{ |playlist| playlist.fullname == @last_fullname } 
+0

Спасибо @bcd за объяснение. Это решило проблему. – Samuel

Смежные вопросы