Is it possible to conditionally include a has_one association in an active model serializer on a record-by-record basis?
In my case I need to not return an association called "group" if the group is of the type "invisible". Here is a snippet from my serializer.
class PostFeedSerializer < ActiveModel::Serializer
attributes :id, :title, :thumbnail_photo, :view_count, :ago, :created_by
has_one :group, serializer: GroupSerializer
What I'd like to do is something to the effect of:
has_one :group, serializer: GroupTinySerializer unless object.get_group.invisible?
Assuming you're using version ~> 0.8.0, you should be able to put the following in your PostFeedSerializer
.
def include_group?
!object.get_group.invisible?
end
That will conditionally include the group
object whenever include_group?
returns true.
Looks like in future versions, AMS will be moving to filter
instead of include_x?
methods.
For anyone using a more recent version of Active Model Serializer, the solution would be:
def filter(keys)
keys.delete :group unless !object.get_group.invisible?
keys
end
You can also do:
has_one :group, serializer: GroupTinySerializer, unless: -> { invisible? }
def invisible?
object.get_group.invisible?
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With