具有用户输入和外部Web服务的多步骤表单

时间:2013-08-09 09:16:50

标签: forms web-services ruby-on-rails-3.2 multi-step

我正在Rails 3.2.3中构建一个预订模型,用户可以逐步浏览多个选择的表单屏幕。如果表单完全镜像了底层模型,我知道我可以使用gem(例如Wicked gem)来构建多步形式。我遇到的问题是,在其中一个表单屏幕上有多个用户选项,在每个选项中,有多个选项来自外部Web服务。换句话说,在多步骤过程的第2步,表单向用户提供了来自我们数据库的许多费率选项,对于每个费率,我们从网络服务中获得了多个附加选项。因此,用户需要从网络服务(单选按钮)中选择一个选项,然后选择他们的选择率。然后在此页面上重复多次(尽管用户只能从网络服务中选择一个单选按钮选项和一个费率)。

我不确定最佳做法是我可以将网络服务中的多个选项显示为单选按钮,但是有一个Hash值与每个选项相关联,因此与每个单选按钮相关联。

所以,问题是,我是否应该尝试将Hash作为一个参数传递给表单进程的下一步,或者我应该将其作为一个对象并完全传递给它或其他东西!

我知道这是一个很长的解释,但我觉得这是设计这个工作流程的一个关键点,我想要做对。

非常感谢,

学家

修改

再次思考,最初的问题是如何在每个单选按钮代表许多值时表示一系列单选按钮,而不是说id(在这种情况下,每个单选按钮代表来自外部Web的值的散列 - 服务)。哈希是否应该被创建为一个对象,而这是传递的 - 沿着那些线?

1 个答案:

答案 0 :(得分:1)

我想出来了。在检查从外部Web服务返回的“哈希”时,我注意到日期字段没有引号,例如。

:departs=>Wed, 21 Aug 2013 10:40:00 +0000

而所有其他字段都在引号中。这让我有点怀疑。所以最后我在返回的哈希上使用了to_json:

response_hash_from_webservice = data.to_json

在我使用的表格中:

JSON.parse(response_hash_from_webservice).each do |nested_item|
  # Access elements like so
  ... nested_item['company_name'] etc ...
end

但是我需要将此nested_item发布到表单的下一步(作为单选按钮),并且只能使用to_json再次使用。

<%= radio_button_tag 'nested_item', nested_item.to_json %>    

然后我可以发布此值或将其放在会话中并在以下表单页面上使用:

require 'json'
hash = JSON.parse session[:nested_item]

然后正常访问这些值:

<%= nested_item['company_name'] %>