Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
517 views
in Technique[技术] by (71.8m points)

serialization - Rails as_json with conditions

In my application, :foos have many :bars, and I'm serializing each foo as JSON like so:

@foo.as_json(
  except: [:created_at, :updated_at], 
  include: { 
    bars: { only: [:ip_addr, :active] }
  }
)

This gives me the following:

{
  "id" => 2, 
  "name" => "Hello World",
  "bars" => [ 
    { "ip_addr" => "192.123.12.32", "active" => 0 }, 
    { "ip_addr" => "192.123.12.33", "active" => 1 } 
  ]
}

As you can see, my serialized hash includes an inactive bar. How can I exclude inactive bars from my hash?

It would be great if I could do this:

include: { bars: { only: { :active => true }}}

Have I taken as_json as far as it will go? Do I need to switch to active model serializers now?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I think you could try add some method like active_bars which will return exactly what you need like:

def active_bars
  bars.where active: true
end

or you could even add new relation:

has_many :active_bars, -> { where active: true }, class_name: '..', foreign_id: '..'

and then you will be able write:

@foo.as_json(
  except: [:created_at, :updated_at], 
  include: { 
    active_bars: { only: [:ip_addr, :active] }
  }
)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...