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