Rails as_json有条件

在我的应用程序中, :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了? 我现在需要切换到活动模型序列化器吗?

我想你可以尝试添加一些像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] } } ) 

你使用as_json条件来为一些动作定制json响应,但为大多数响应所需的默认json响应的模型序列化器。

阅读这些Model_Serializer VS. as_json , 记录序列化器 – 从头开始 。