2013-09-02 1 views
1

Для простоты я написал этот вопрос, как если бы писал приложение для блога, но на самом деле это совершенно другое приложение. У меня есть действие show, подобное этому в моих users_controller.rb.сложные ассоциации с активным сериализатором модели

def show 
     @user = User.find(params[:id]) 
     @posts = @user.posts 
    respond_to do |format| 
     format.html 
     format.json { render json: @user } 
    end 
    end 

Каждый post также имеет много comments. Если бы я хотел показать все сообщения пользователя и комментарии к этим сообщениям (, независимо от того, какой пользователь сделал комментарий), в views/user/show.html.erb довольно легко получить доступ к этим комментариям из очевидной связи между сообщениями и комментариями.

<% for post in @posts %> 

<% post.comments.each do |c| %> 

... 

Это даст мне все комментарии на эти должности, а не только комментарии, которые пользователь сделал, что то, что я хочу.

Теперь я использую активный сериализатор модели в этом приложении, а в пользовательском сериализаторе могу объявить связь с сообщениями has_many :posts, а затем, если я перейду на localhost: 3000/user/1.json, я вижу детали пользователя и сообщения. Тем не менее, я не могу объявить has_many :comments, если только мне не нужны комментарии, сделанные этим пользователем. Тем не менее, я хочу, чтобы все комментарии к этим сообщениям были независимо от пользователя, который их создал.

Как я могу добиться этого с помощью активного сериализатора модели?

ответ

0

Вы можете создать новый сериалайзер для сообщений, который включает все комментарии:

class FullPostSerializer < ActiveModel::Serializer 

    has_many :comments 

    def comments 
    object.comments 
    end 

end 

Затем используют FullPostSerializer в вашем пользователя сериализатором:

has_many :post, serializer: FullPostSerializer