我知道這個問題已經有了答案,但你也可以使用被稱爲active_model_serializers一個漂亮的寶石。這使您可以在不同模型的JSON輸出中準確指定您想要的屬性,甚至可以在響應中包含與其他模型的關係。
的Gemfile:
gem 'active_model_serializers', '~> 0.10.0'
然後運行bundle install
。
您可以然後使用生成器命令創建一個串行:
rails g serializer user
將在project-root/app/serializers/
創建序列化。
在你的序列化,你可以白名單的屬性,你想:
項目根/應用/串行器/ user_serializer.rb:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email
end
現在任何時候你返回一個對象User
它只會輸出這兩個屬性,id
和email
。
想要打印相關型號?簡單。您只需在序列化程序中添加關係,它將在JSON輸出中包含這些相關模型。
假裝用戶 「有很多」 的帖子:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email
has_many :posts
end
現在你的JSON輸出應該是這個樣子:
{
"id": 1,
"email": "[email protected]",
"posts": [{
id: 1,
title: "My First Post",
body: "This is the post body.",
created_at: "2017-05-18T20:03:14.955Z",
updated_at: "2017-05-18T20:03:14.955Z"
}, {
id: 2,
title: "My Second Post",
body: "This is the post body again.",
created_at: "2017-05-19T20:03:14.955Z",
updated_at: "2017-05-19T20:03:14.955Z"
},
...
]
}
漂亮整潔又方便。如果您想限制帖子只打印某些列,那麼您只需要爲posts
創建一個序列化程序,指定屬性,並且輸出將正常工作。
我不認爲這是您的問題的準確表示。 'render json:{user:user.pluck(:id,:email),status:status}'will ** not **返回整個序列化的用戶對象。如果你已經簡化了這個問題,試圖提供一個最小的方案,你能確保它仍然是一個可驗證的描述嗎? –
@TomLord @TomLord你的建議導致錯誤'undefined method'pluck'for#
AnApprentice
啊對不起,我忘了我們在這裏處理單個對象....所以你*可以*已經完成'user.attributes .extract!('id','name')'。儘管使用'as_json'更好。我的觀點基本上是,你的問題沒有描述你的錯誤**。 –