2015-12-14 2 views
0

В моем Rails 4.2 API я использую активные сериализаторы модели для построения ответа json. Предположим, что Post - это модель, и у нее много comments, и я хочу только включить комментарии, которые одобрены/опубликованы. Я использую область под названием approved, которая дает одобренные комментарии.Rails 4: ActiveModelSerializer, как включить только те записи, которые одобрены?

Ответ JSON на сообщение содержит все комментарии, как включить записи, которые одобрены, а не все. Как создать Post serializer для этого.

class PostSerializer < ActiveModel::Serializer 
    attributes :name, :body 
    has_many :comments 
end 

ответ

1
class PostSerializer < ActiveModel::Serializer 
    attributes :name, :body 
    has_many :comments 

    def comments 
    object.comments.where(status: 'approved') 
    end 
end 

См Active Model Serializers - overriding association methods

+0

Это говорит '(лямбда)> не является символом, ни string' – StarWars

+0

@StarWars моя ошибка. Обновлено. Вы можете, конечно, «scope: approved, ...» в классе Comment и использовать 'object.comments.approved' выше – roob

+0

спасибо. это сработало. Это лучший/единственный способ сделать это? – StarWars

1

Переопределение ассоциации в вашем сериализатором будет работать. В сериализаторе просто переопределить с помощью этого метода

def comments 
    #Your comments filtering 
end 

Если это не работает, то, что надо быть каким-то вопросом с вашей версией сериализатора. Посмотрите на эту проблему для получения более подробной информации и обходных решений. https://github.com/rails-api/active_model_serializers/issues/267

Проверьте это. How do I select which attributes I want for active model serializers relationships

0
class PostSerializer < ActiveModel::Serializer 
    attributes :name, :body 
    has_many :approved_comments, -> { where status: 'approved' }, class_name: 'Comment' 
end 

PostSerializer.includes(:approved_comments) 

Scoping с approved_comments. Извлечение только комментариев со статусом approved. Есть понятие от этого http://apidock.com/rails/ActiveRecord/Associations/ClassMethods

+0

Некоторые объяснения были бы полезны. –