Rails 4 显示操作结果并执行以下操作

Rails 4 show action result and execute following action

我对通过爱沙尼亚 mobileID 系统的身份验证请求有以下要求:

  1. 在 rails 应用程序上,用户单击按钮,创建对 id 数据库的请求,同时生成事务控制代码
  2. 在 rails 应用上,控制代码显示在视图上
  3. 用户验证控制代码是否与他们现在在 phone 上收到的代码相同,如果有效用户在 phone
  4. 上输入了 pin
  5. rails 应用程序现在需要查询 id 数据库以获得交互用户的结果 phone <> id 数据库系统
  6. 根据状态呈现结果

我有后端工作,但是,我对 rails 应用程序中的流程感到困惑。我目前在我的控制器中有以下操作:

def id_user
  @user = current_user
  #create a new object for identification request & call MobileIdServce method to invoke the sending of a request
  @identification = MobileIdService.new(current_user).send_request
  flash[:notice] = "Control Code: #{@identification[:challenge_id]}"

  # on this point i tried both, render and redirect to a separate action
  render action: "show"

  #redirect_to({ action: 'check_request_status', session_code: @identification[:sesscode] }, notice: "Control Code: #{@identification[:challenge_id]}")
  #here starts the request status check
  check_request_status(@user,@identification[:sesscode])
end

private

# I also tried to implement this as a separate action before, but i think a private method is more appropriate

def check_request_status(user,session_code)
  @user         = user
  @session_code = session_code
  MobileIdService.new(current_user).check_request(@user, @session_code)
end

在这两种情况下(1. 两个动作,第一个重定向到第二个,2. 第一个调用私有方法)我遇到的问题是我需要操纵视图以显示控制代码。

如果我完成该过程,控制代码显示,只有在操作完成后才成功,作为通知。

有什么好的做法可以解决这个问题吗?

我有点深入了。我很乐意执行单个操作(用户发送请求)和单个结果视图(用户看到控制代码),但从用户体验的角度来看,我不能期望用户主动启动第二个操作,如 la "click here to check your request status"。这需要是自动的。

我接受了以下场景。

  1. 用户通过表单向呈现 js 部分的用户控制器上的 GET 操作提交请求。
  2. 此操作 'send_id_request' 创建针对外部服务的请求和 returns js 部分的控制代码
  3. 一旦 js 部分被渲染和执行,它会自动调用用户控制器上的第二个 GET 操作 'check_id_request_status'
  4. 此操作在服务器端启动一个有限循环以检查请求的状态,并使用结果呈现另一个 js 部分

我目前认为在客户端 运行 循环可能有意义,这样如果用户想要取消请求,它就可以被杀死。否则没有很好的方法来终止服务器端的循环。

但是,是的,到目前为止一切顺利。