2016-03-13 3 views
3

Так что яВ активных селекторах модели, как ограничить связанные объекты, возвращенные из ассоциации has_many?

render json: Post.all  

Это возвращает все мои сообщения и в моем посте сериализатором меня

class PostSerializer < ActiveModel::Serializer 
     has_many :comments 
    end   

Я хочу, чтобы количество комментариев, возвращенных в формате JSON, чтобы быть ограничено 5 и имеют переменную в котором говорится, что там больше комментариев. Это возможно?

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

ответ

2

В вашей модели комментариев напишите метод scope, чтобы ограничить количество комментариев.

В моделях/comment.rb

scope :limited_comments, lambda { limit(5) } 

В PostSerializer

has_many :comments 

def comments 
    Comment.limited_comments 
end 
+0

Просто делая Comment.limited_comments вернул комментарии, ограниченные 5, но удалил область сообщения Post, так что я получил комментарии от разных сообщений. Запись, где утверждение было впереди, было исправление. Спасибо! Любая идея, как я могу дать has_more boolean вместе с данными? – Rishabh

+0

Определите метод has_more в сериализаторе и включите в атрибуты – nitishmadhukar

0

Я боюсь, что нет никакого способа ограничить количество возвращенных записей в сериализаторе. Однако вы можете ограничить свои записи в контроллере нижними строками.

# This code returns last 5 posts  
posts = Post.last(5) 

render json: posts 

Вы думаете о реализации какой-либо функции разбивки на страницы здесь?

+0

Но что бы ограничить сообщения, отправленные. Я хочу ограничить количество комментариев, которые возвращаются с сообщением. Я добавлю разбивку на страницы в сообщениях позже. Хотелось увидеть это сначала – Rishabh

3
has_many :comments do 
    @object.comments.limit(5) 
end