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

时间:2015-03-25 22:55:34

标签: ruby-on-rails view action message

我通过爱沙尼亚移动ID系统对识别请求有以下要求:

  1. 在rails app上,用户点击按钮,创建对id数据库的请求,这也生成一个事务控制代码
  2. 在rails应用程序上
  3. ,控制代码显示在视图
  4. 用户验证控制代码与他们当前在手机上接收的控制代码是否相同,以及有效用户是否在手机上输入了PIN码
  5. rails app现在需要查询id数据库以获得交互用户电话的结果<> id数据库系统
  6. 取决于呈现结果的状态
  7. 我有后端工作,但是,我对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.两个动作,第一个重定向到第二个,第一个调用私有方法)我有问题,我需要操纵视图以显示控制代码。

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

    关于如何处理这个问题有什么好的做法吗?

    我有点深入了解它。我很乐意使用单个结果视图(用户看到控制代码)进行单个操作(用户发送请求),但是从用户体验的角度来看,我不能指望用户主动开始第二个操作,然后单击此处检查您的请求状态"。这需要是自动的。

1 个答案:

答案 0 :(得分:0)

我决定采用以下方案。

  1. 用户通过表单向用户控制器上的GET操作提交请求,该操作呈现js partial。
  2. 此操作'send_id_request'创建针对外部服务的请求,并将控制代码返回给js partial
  3. 一旦呈现并执行了js partial,它会自动调用用户控制器'check_id_request_status'上的seconde GET操作
  4. 此操作启动有限循环服务器端以检查请求的状态,并使用结果呈现另一个js partial
  5. 我目前认为实际运行循环客户端可能是有意义的,因此如果他们想要取消请求,它可以被用户杀死。否则就没有好办法在服务器端杀死循环。

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