ActiveModel Serializer - Passing Params To Serializers
Answer :
AMS version: 0.10.6
Any options passed to render
that are not reserved for the adapter
are available in the serializer as instance_options
.
In your controller:
def index @watchlists = Watchlist.belongs_to_user(current_user) render json: @watchlists, each_serializer: WatchlistOnlySerializer, currency: params[:currency] end
Then you can access it in the serializer like so:
def market_value # this is where I'm trying to pass the parameter Balance.watchlist_market_value(self.id, instance_options[:currency]) end
Doc: Passing Arbitrary Options To A Serializer
AMS version: 0.9.7
Unfortunately for this version of AMS, there is no clear way of sending parameters to the serializer. But you can hack this using any of the keywords like :scope
(as Jagdeep said) or :context
out of the following accessors:
attr_accessor :object, :scope, :root, :meta_key, :meta, :key_format, :context, :polymorphic
Though I would prefer :context
over :scope
for the purpose of this question like so:
In your controller:
def index @watchlists = Watchlist.belongs_to_user(current_user) render json: @watchlists, each_serializer: WatchlistOnlySerializer, context: { currency: params[:currency] } end
Then you can access it in the serializer like so:
def market_value # this is where I'm trying to pass the parameter Balance.watchlist_market_value(self.id, context[:currency]) end
Try using scope
in controller:
def index @watchlists = Watchlist.belongs_to_user(current_user) render json: @watchlists, each_serializer: WatchlistOnlySerializer, scope: { currency: params[:currency] } end
And in your serializer:
def market_value Balance.watchlist_market_value(self.id, scope[:currency]) end
Comments
Post a Comment