当json在rails应用程序中序列化对象时,您将如何过滤对象的关联?
想象一下:
- 一个月一个月一个月一个月
- 任何给定的
Bar
都可以是活动的或非活动的(具有属性is_active
) - Foo有一个方法
active_bars
- 用于获取
Foo
的JSON API应仅返回活动条形图 - 感觉应该向客户隐藏活动/非活动的概念
您将在何处以及如何实现过滤,以及您将在响应中使用什么键名?
当前想法:
1.使用默认的json序列化,并在一个名为active_bars
的键中返回active_bars,即foo.as_json({methods: [:active_bars]})
。缺点是它使用了一个名为active_bars
的键,因此“active”的概念现在在API中公开。
1.让控制器在一个实用程序方法中定制json,这样active_bars
就被放在json中,关键字是bars
。缺点是,如果我们以后需要在不同的API端点中序列化Foo
,我们现在需要记住使用这个实用程序方法。
1.重写Foo.as_json
,这样它总是在一个名为bars
的键中返回active_bars
。缺点是我们默认的json格式开始偏离我们的实际结构。不清楚如果我们希望json同时具有bars
和active_bars
该怎么办。也许可以?也许我们应该考虑as_json
作为公共格式?
1.重写Foo.as_json
,这样它就有了一个自定义选项(:foo_active_bars_only
),并且只有在被要求时才这样格式化它。缺点是使用了一个我们无法控制的rails API的自定义选项。也许可以。
1.其他选择?
1条答案
按热度按时间a0zr77ik1#
我会使用
jbuilder
这样的gem,这样我就可以查看呈现JSON的文件。我发现这更容易构建、阅读和在应用程序中共享。我的
show.json.jbuilder
文件中有一个Foo:(this将在键“栏”下列出活动栏)
如果
Foo
也嵌套在其他地方的另一个JSON响应中返回,我将把这个呈现逻辑拉到一个名为_foo.json.jbuilder
的部分中,并在上面的show.json.jbuilder
文件以及其他地方使用该部分,以便它们使用相同的键名呈现。