2017-02-27 101 views
2
class User 
    has_many :posts 
end 

我想用as_json方法呈现json散列。在as_json中订购嵌套关联

如何在下面的代码中通过updated_at属性排列帖子而不设置关联的默认顺序?

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

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

+0

可能重复的[Rails渲染为json,包括嵌套属性和排序](h ttp://stackoverflow.com/questions/6972406/rails-render-as-json-include-nested-attribute-and-sort) –

+0

@ Slava.K感谢您的努力,但你在哪里看到'as_json'你发现的问题? –

+0

该答案中列出的所有工艺对'as_json'也同样适用。试试吧。 –

回答

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) 
+0

非常感谢您的工作解决方案!但遗憾的是,似乎没有任何继承方式可以做到这一点。通过':only',':ecxept'这些方便的帮助器方法,它是雕刻小型json对象的一种非常好的和快速的方法。 –