2015-04-14 2 views
1

Я хотел бы использовать метод срывать в активной модели Serializer для объекта ассоциации:Использования срывать в активной модели Serializer

Post has_many :comments 

Есть ли способ, чтобы переопределить

has_many :comments 

в сериализаторе использовать pluck (: id,: title) в комментариях?

ответ

1

Вы можете использовать блок с has_many, чтобы расширить связь с методами. См. Комментарий «Используйте блок для расширения ваших ассоциаций» here.

class Post < ActiveRecord::Base 
    has_many :comments do 
    def plucked() 
     select("id, title") 
    end 
    end 
end 

или другой подход, с той же ссылкой может быть, есть свой собственный запрос SQL при выборке comments из базы данных:

has_many :comments, :class_name => 'Comment', :finder_sql => %q(
    SELECT id, title 
    FROM comments 
    WHERE post_id = #{id} 
) 

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

+0

Разве это не так, как устанавливать атрибуты в комментариях сериализатора? Я хочу использовать pluck для связанных комментариев, потому что это быстрее, чем с активной сериализацией записей объекта комментариев. –

+0

Можете ли вы указать, какова ваша конечная цель, чего вы хотите достичь здесь, указав пример. – Saurabh

+0

Целью является получение связанных объектов с помощью родителя. В этом случае вы получите комментарии к сообщению. Но так как есть много комментариев, постарайтесь сделать запрос как можно быстрее, используя pluck для связанных комментариев в сериализаторе. –

0

Что я обычно делаю в этой ситуации, у меня есть два разных сериализатора CommentSerializer и CommentInfoSerializer. Таким образом, CommentInfoSerializer включает только минимальные атрибуты, которые я хочу ответить во встроенном атрибуте их родительского ресурса.

class CommentSerializer < ActiveModel::Serializer 
    attributes :id, :title, :body 
end 

class CommentInfoSerializer < ActiveModel::Serializer 
    attributes :id, :title 
end 

class PostSerializer < ActiveModel::Serializer 
    has_many :comments, serializer: CommentInfoSerializer 
end 
Смежные вопросы