在我的应用程序中,:foos
有很多:bars
,我将每个foo序列化为JSON,如下所示:
@foo.as_json(
except: [:created_at, :updated_at],
include: {
bars: { only: [:ip_addr, :active] }
}
)
这给了我以下内容:
{
"id" => 2,
"name" => "Hello World",
"bars" => [
{ "ip_addr" => "192.123.12.32", "active" => 0 },
{ "ip_addr" => "192.123.12.33", "active" => 1 }
]
}
如您所见,我的序列化哈希包含一个非活动栏。如何从哈希中排除非活动栏?
如果我能做到这一点会很棒:
include: { bars: { only: { :active => true }}}
我是否已尽可能地as_json
了?我现在需要切换到活动模型序列化器吗?
答案 0 :(得分:4)
我认为您可以尝试添加一些像active_bars
这样的方法,它会准确地返回您需要的方法:
def active_bars
bars.where active: true
end
或者您甚至可以添加新关系:
has_many :active_bars, -> { where active: true }, class_name: '..', foreign_id: '..'
然后你就可以写:
@foo.as_json(
except: [:created_at, :updated_at],
include: {
active_bars: { only: [:ip_addr, :active] }
}
)
答案 1 :(得分:1)
你使用as_json作为一些操作的自定义json响应的条件,但为大多数响应需要的默认json响应的模型序列化器。
阅读这些Model_Serializer VS. as_json,record-serializers-from-scratch。