2017-02-27 105 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對象的一種非常好的和快速的方法。 –