Я использую Serializers Active Model с моим API Rails 4, и я пытался выяснить, как включить атрибут auth_token
в свой ответ JSON только, когда пользователь входит в систему по адресу sessions#create
. Я прочитал AMS documentation и попробовал большинство из кажущихся решений, но никто не работал.Active Serializer - как включить атрибут условно? Rails
пару вещей, укажут:
:auth_token
не является вUserSerializer
«s атрибуты списка.- Поскольку
auth_token
является специфичным для контроллера, я не могу выполнять условную логику вUserSerializer
, если только не существует способа определить, какой контроллер был вызван в Сериализаторе. Таким образом, нетdef include_auth_token? ... end
.
Некоторые из вещей, которые я пробовал уже:
class Api::V1::SessionsController < ApplicationController
if user = User.authenticate(params[:session][:email], params[:session][:password])
if user.active
user.generate_auth_token #=> Custom method
user.save
# Tried using the meta param
render :json => user, :meta => {:auth_token => user.auth_token}
# Tried using the include param both with 'auth_token' and 'user.auth_token'
render :json => user, include: 'user.auth_token'
end
end
end
В идеале, я хотел бы быть в состоянии использовать что-то вдоль линий render :json => user, :include => :auth_token
дополнительно включать в себя атрибуты уже не определены в UserSerializer
.
Каков правильный способ условного включения атрибутов с контроллера с помощью AMS?
Это сделал работу немного, но не достичь своих желаемых результатов. С помощью этого метода возвращались все атрибуты и использование опции ': exclude' в моем вызове' render: json' (как это ни странно) не удалял атрибуты. Однако я ценю вашу помощь. –
Если в опции ': exclude' есть какая-то странность, вы всегда можете изменить хэш непосредственно в последнем параметре, например:' render: json => user_payload.except (: some,: keys,: to,: exclude) ' – yez