如何在设计响应中包含用户 has_many 关联?

How to include user has_many association on sign in response from devise?

希望你们一切顺利,

我有这个用户,它与地址模型(用户 has_many 地址)有 has_many 关联。我如何配置 return 登录时的所有用户地址?

该关联已经运作良好,但我似乎无法找到一个简单的解决方案,而不是执行另一个请求以从用户那里获取地址信息,或者覆盖设计会话控制器。 (我没有尝试,因为我不知道如何在不弄乱默认配置的情况下准确地做到这一点)

更新:我正在使用设计令牌身份验证来处理会话

Devise::SessionsController#create 看起来像这样:

class Devise::SessionsController < DeviseController

  # ...

  def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message!(:notice, :signed_in)
    sign_in(resource_name, resource)
    yield resource if block_given?
    respond_with resource, location: after_sign_in_path_for(resource)
  end
end

respond_withresponders gem 中的一种方法,实际上会生成响应。最简单的方法是只重写该方法,但您也可以创建自己的响应程序,这在自述文件中有介绍。

class MySessionsController < Devise::SessionsController

  private
  
  def respond_with(resource, **options)
    return super unless action_name == 'create'
    # generate whatever response you want
  end
end
# config/routes.rb
devise_for :users, controllers: {
  sessions: 'my_sessions'
}

通过实施在这个问题中找到的答案解决:https://github.com/lynndylanhurley/devise_token_auth/issues/597#issuecomment-291893591

user.rb

def token_validation_response                                                                                                                                         
    self.as_json(include: :addresses)
end