Rails as_json有条件

时间:2014-09-02 12:56:10

标签: ruby-on-rails serialization

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

2 个答案:

答案 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_jsonrecord-serializers-from-scratch