【问题标题】:Active Model Serilazer returns default JSON objectActive Model Serilazer 返回默认 JSON 对象
【发布时间】:2016-04-22 09:37:18
【问题描述】:

我有一个像这样的 Active Model Serializer 类

class PostSerializer < ActiveModel::Serializer
 attributes :activities
 def activities
    object.activities.each do |activity|
      post_json(activity) if activity.class.name == 'Post'
      like_json(activity) if activity.class.name == 'PostLike'
      comments_json(activity) if activity.class.name == 'PostComment'
    end
  end

  def post_json(post)
    {
        type: 'share',
        user: post.user_id,
        user_name: post.user.display_name,
        user_image_thumb: post.user.profile.image.thumb.url,
        id: post.id,
        created_at: post.created_at
    } if post
  end

  def like_json(like)
    {
        type: 'like',
        user: like.user_id,
        user_name: like.user.display_name,
        user_image_thumb: like.user.profile.image.thumb.url,
        id: like.id,
        created_at: like.created_at
    } if like
  end

  def comments_json(comment)
    {
        type: 'comment',
        user: comment.user_id,
        user_name: comment.user.display_name,
        user_image_thumb: comment.user.profile.image.thumb.url,
        id: comment.id,
        created_at: comment.created_at,
        content: comment.content
    } if comment
  end
end

但响应始终返回默认响应对象,并且不包含来自 json 构建器方法的字段。

"activities": [
      {
        "id": 40,
        "user_id": 22,
        "post_id": 8,
        "created_at": "2016-04-22T07:29:26.210Z",
        "updated_at": "2016-04-22T07:29:26.210Z"
      }
]

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    each 更改为map

     def activities
        object.activities.map do |activity|
          post_json(activity) if activity.class.name == 'Post'
          like_json(activity) if activity.class.name == 'PostLike'
          comments_json(activity) if activity.class.name == 'PostComment'
        end
      end
    

    Array#each vs. Array#map

    【讨论】:

    • @SoorajChandu 阅读链接Array#each vs. Array#map
    • 谢谢你..我不知道这个
    • @SoorajChandu 如果这个答案令人满意,请接受。 :)
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 2016-06-29
    • 2013-10-11
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多