Rails 5.2 запрос ActiveRecord возвращает массив вместо ActiveRecord :: AssociationRelation - PullRequest
0 голосов
/ 16 октября 2018

Я вижу, что выполнение запроса .first () или .last () для запроса ActiveRecord возвращает массив вместо ActiveRecord :: AssociationRelation.Это мешает мне добавить предложение .order (), так как это не метод массива.

Возвращаясь к цели на минуту, я хочу получить последние пять («живые», то есть активные).комментарии, относящиеся к сообщению, и этот код завершается ошибкой:

@post.comments.where(status: "live").last(5).order(id: :desc)

Ошибка:

неопределенный метод `order 'для #

Если я удаляю предложение .last () или предложение .order (), я получаю правильный результат, но, очевидно, не тот набор результатов, к которому я стремлюсь.

Чтолучший способ получить последние пять комментариев в обратном хронологическом порядке?Что еще более важно, возможно, где находится лучшая документация / учебник по этому синтаксису?Я считаю официальным руководством слишком кратким.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

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

Что касается вашего вопроса, вы можете использовать метод limit вместо first или last:

@post.comments.where(status: "live").limit(5).order(id: :desc)

Этоне влияет на тип результата (остается ActiveRecord::AssociationRelation).Следовательно, если результат не найден, это отношение с методом to_a будет преобразовано в пустой массив.Это отличается от поведения методов first и last, которые возвращают nil в случае отсутствия результата.

0 голосов
/ 16 октября 2018

Как насчет чего-то вроде:

@post.comments.where(status: 'live').order(created_at: :desc).take(5)

Я только что подключил created_at.Возможно, вы захотите updated_at вместо этого.

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