我正在使用Grape + Mongoid + Devise。 我发现当我编写API响应时,Devise用户模型比用户json输出有更多字段(例如encrypted_password,sign_in_count,last_sign_in_at)。 我搜索过Devise代码,没有找到像自定义to_json这样的东西,Devise是如何实现的呢?
答案 0 :(得分:0)
我不确定Grape,但是在Rails上你可以用序列化器来做(因为Grape有许多与Rails兼容的代码,我认为这是一个很大的工作机会)。
要使用序列化程序,您需要包含“active_model_serializers”gem。
示例:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :username
end
在此示例中,Devise将始终仅在JSON输出上打印这3个字段。
要包含除其中一些属性之外的所有属性,您可以执行以下操作:
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