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

问题描述

希望你们一切顺利,

我有这个用户,它与一个地址模型(用户 has_many 地址)有一个 has_many 关联。我如何配置设计以在登录时返回所有用户地址?

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

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

解决方法

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_with 是来自 responders 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...