Rails 4 显示操作结果并执行以下操作
Rails 4 show action result and execute following action
我对通过爱沙尼亚 mobileID 系统的身份验证请求有以下要求:
- 在 rails 应用程序上,用户单击按钮,创建对 id 数据库的请求,同时生成事务控制代码
- 在 rails 应用上,控制代码显示在视图上
- 用户验证控制代码是否与他们现在在 phone 上收到的代码相同,如果有效用户在 phone
上输入了 pin
- rails 应用程序现在需要查询 id 数据库以获得交互用户的结果 phone <> id 数据库系统
- 根据状态呈现结果
我有后端工作,但是,我对 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"。这需要是自动的。
我接受了以下场景。
- 用户通过表单向呈现 js 部分的用户控制器上的 GET 操作提交请求。
- 此操作 'send_id_request' 创建针对外部服务的请求和 returns js 部分的控制代码
- 一旦 js 部分被渲染和执行,它会自动调用用户控制器上的第二个 GET 操作 'check_id_request_status'
- 此操作在服务器端启动一个有限循环以检查请求的状态,并使用结果呈现另一个 js 部分
我目前认为在客户端 运行 循环可能有意义,这样如果用户想要取消请求,它就可以被杀死。否则没有很好的方法来终止服务器端的循环。
但是,是的,到目前为止一切顺利。
我对通过爱沙尼亚 mobileID 系统的身份验证请求有以下要求:
- 在 rails 应用程序上,用户单击按钮,创建对 id 数据库的请求,同时生成事务控制代码
- 在 rails 应用上,控制代码显示在视图上
- 用户验证控制代码是否与他们现在在 phone 上收到的代码相同,如果有效用户在 phone 上输入了 pin
- rails 应用程序现在需要查询 id 数据库以获得交互用户的结果 phone <> id 数据库系统
- 根据状态呈现结果
我有后端工作,但是,我对 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"。这需要是自动的。
我接受了以下场景。
- 用户通过表单向呈现 js 部分的用户控制器上的 GET 操作提交请求。
- 此操作 'send_id_request' 创建针对外部服务的请求和 returns js 部分的控制代码
- 一旦 js 部分被渲染和执行,它会自动调用用户控制器上的第二个 GET 操作 'check_id_request_status'
- 此操作在服务器端启动一个有限循环以检查请求的状态,并使用结果呈现另一个 js 部分
我目前认为在客户端 运行 循环可能有意义,这样如果用户想要取消请求,它就可以被杀死。否则没有很好的方法来终止服务器端的循环。
但是,是的,到目前为止一切顺利。