在as_json中排序嵌套关联

时间:2017-02-27 13:09:10

标签: ruby-on-rails json ruby-on-rails-5

class User
  has_many :posts
end

我想用as_json方法渲染json哈希。

如何在不设置关联的默认顺序的情况下,通过updated_at属性在下面的代码中订购帖子?

user.as_json(include: {posts: {include: :comments})

这不会被用作请求响应,我想避免在关联上设置默认排序。

1 个答案:

答案 0 :(得分:2)

您可以使用自定义方法代替范围:

class User < ApplicationRecord
  has_many :posts

  def updated_posts
    posts.order("posts.updated_at").as_json(include: :comments)
  end
end

user.as_json(methods: :updated_posts)

这会产生这样的结果:

{
  # user attributes
  "updated_posts => [
    # posts with comments
  ]
}

如果您希望帖子严格位于posts键下,您可以执行以下操作:

json = user.as_json(methods: :updated_posts)
json[:posts] = json.delete(:updated_posts)