我正在使用Active Model Serializer與我的Rails 4 API,並且我一直在試圖弄清楚如何在我的JSON響應中包含auth_token
屬性只有當用戶登錄在sessions#create
。我讀了AMS documentation,並嘗試了大部分看似解決方案,但都沒有成功。活動模型序列化程序 - 如何有條件地包含屬性? Rails
幾件事情要指出:
:auth_token
不在的屬性列表中UserSerializer
。- 由於
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控制器的屬性的正確方法是什麼?
這沒有工作了一點,但沒有達到我預期的效果。使用此方法返回所有屬性,並在我的'render:json'調用中使用':exclude'選項(奇怪)並未刪除屬性。雖然我感謝你的幫助。 –
如果在':exclude'選項中有一些奇怪的地方,你可以在最後一個選項中直接修改哈希,例如:'render:json => user_payload.except(:some,:keys,:to,:exclude) – yez