2015-08-01 3 views
1

Я использую Grape + Mongoid + Devise. Я обнаружил, что пользовательская модель Devise имеет больше полей (например, encrypted_password, sign_in_count, last_sign_in_at), чем пользовательский вывод json, когда я написал ответ API. Я искал код Devise, не нашел ничего похожего на пользовательский to_json, как это делает Devise?Как Devise скрывает некоторые поля при выходе json

ответ

0

Я не уверен в Grape, но на Rails вы можете сделать это с помощью сериализатора (поскольку у Винограда много кода, совместимого с Rails, я думаю, что есть большая возможность работать).

Чтобы использовать сериализатор, вам необходимо включить драгоценный камень «active_model_serializers».

Пример:

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

На этом примере Разрабатывает всегда будет печатать только эти 3 поля на выходе JSON.

Чтобы включить все атрибуты, кроме некоторых из них, вы можете сделать что-то вроде этого:

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

Кроме того, по крайней мере, на Rails, вы хотите, чтобы удалить корень из вывода. Для этого добавьте этот код к вашему application_controller.rb:

def default_serializer_options 
    {root: false} 
end