gpt4 book ai didi

ruby-on-rails - 使用 devise_token_auth 和 active_model_serializer 时覆盖序列化程序

转载 作者:行者123 更新时间:2023-12-03 16:04:20 24 4
gpt4 key购买 nike

将 devise_token_auth 和 active_model_serializer 用于 Devise sign_up 方法时,我无法覆盖 Rails 序列化程序。

我想在查询我的 API 时自定义从设计 sign_up Controller 返回的字段。

devise_token_auth gem 文档指出:

要自定义 json 渲染,请实现以下 protected Controller 方法

注册 Controller

...

render_create_success

...

注意: Controller 覆盖必须实现它们替换的 Controller 的预期操作。

这一切都很好,但我该怎么做呢?

我试过生成一个 UserController 序列化程序,如下所示:

class UsersController < ApplicationController

def default_serializer_options
{ serializer: UserSerializer }
end

# GET /users
def index
@users = User.all

render json: @users
end

end

但它仅用于自定义方法,例如上面的 index 方法:它不会被像 sign_up 这样的设计方法接收

我希望得到详细的回复,因为我到处都看过,但我一次只能得到一个拼图。

最佳答案

对于特定的序列化器问题,我是这样做的:

覆盖/sessions_controller.rb

module Api
module V1
module Overrides
class SessionsController < ::DeviseTokenAuth::SessionsController

# override this method to customise how the resource is rendered. in this case an ActiveModelSerializers 0.10 serializer.
def render_create_success
render json: { data: ActiveModelSerializers::SerializableResource.new(@resource).as_json }
end
end
end
end
end

配置/路由.rb
namespace :api, defaults: {format: 'json'} do
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
sessions: 'api/v1/overrides/sessions'
}
# snip the rest

关于ruby-on-rails - 使用 devise_token_auth 和 active_model_serializer 时覆盖序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com