与活动模型序列化器的复杂关联

时间:2013-09-02 17:10:36

标签: ruby-on-rails active-model-serializers

为了简单起见,我写了这个问题就像写博客应用程序一样,但事实上它是一个完全不同的应用程序。我的users_controller.rb中有一个与此类似的show动作。

   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。但是,我想要对这些帖子发表所有评论,无论用户是谁。

如何使用活动模型序列化器实现此目的?

1 个答案:

答案 0 :(得分:0)

您可以为帖子创建一个新的序列化程序,其中包含所有注释:

class FullPostSerializer < ActiveModel::Serializer

  has_many :comments

  def comments
    object.comments
  end

end

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

has_many :post, serializer: FullPostSerializer