2015-08-01 4 views
1

J'utilise Grape + Mongoid + Devise. J'ai trouvé que le modèle d'utilisateur Devise a plus de champs (par exemple, password_cryptée, sign_in_count, last_sign_in_at) que la sortie json de l'utilisateur lorsque j'ai écrit une réponse API. J'ai cherché dans le code de Devise, je n'ai pas trouvé quelque chose comme custom to_json, comment Devise a-t-il atteint cet objectif?Comment Devise cache-t-il certains champs lors de la sortie json

Répondre

0

Je ne suis pas sûr sur Raisin, mais sur Rails vous pouvez le faire avec un serializer (comme Grape a beaucoup de code compatible avec Rails, je pense qu'il y a une grande chance de travailler).

Pour utiliser un sérialiseur, vous devez inclure la gemme "active_model_serializers".

Exemple:

class UserSerializer < ActiveModel::Serializer 
    attributes :id, :email, :username 
end 

Sur cet exemple, toujours imprimer Devise seulement ces 3 champs sur une sortie JSON.

Pour inclure tous les attributs sauf certains d'entre eux, vous pouvez faire quelque chose comme ceci:

class UserSerializer < ActiveModel::Serializer 
    attributes(*(User.attribute_names - ["date_created", "first_name"]).map(&:to_sym)) 
end 

En outre, au moins sur les rails, vous voulez supprimer la racine de la sortie. Pour ce faire, ajoutez ce code à votre application_controller.rb:

def default_serializer_options 
    {root: false} 
end