1

为了简单起见,我写了这个问题,就像写博客应用程序一样,但实际上它是一个完全不同的应用程序。我的 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但是,除非我只想要该用户发表的评论,否则我无法声明。但是,我想要对这些帖子的所有评论,而不管发布它们的用户是谁。

我如何使用主动模型序列化器来实现这一点?

4

1 回答 1

0

您可以为包含所有评论的帖子创建一个新的序列化程序:

class FullPostSerializer < ActiveModel::Serializer

  has_many :comments

  def comments
    object.comments
  end

end

然后在您的用户序列化程序中使用 FullPostSerializer:

has_many :post, serializer: FullPostSerializer

于 2013-11-25T08:52:47.660 回答