【问题标题】:Multi-step form with user-input and external web-service具有用户输入和外部 Web 服务的多步表单
【发布时间】:2024-01-19 07:42:01
【问题描述】:

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

我不确定最佳实践的地方是,我可以将 Web 服务中的多个选项显示为单选按钮,但每个选项都有一个哈希值,因此与每个单选按钮相关联。

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

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

非常感谢,

J.

编辑

再想一想,最初的问题是当每个单选按钮代表许多值而不是一个 id 时,如何表示一系列单选按钮(在这种情况下,每个单选按钮代表来自外部网络的值的哈希值-服务)。是否应该将散列变成一个对象并传递给它 - 类似的东西?

【问题讨论】:

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


    【解决方案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
    

    但是我需要将此嵌套项发布到表单的下一步(作为单选按钮),并且它只能通过再次使用 to_json 来工作。

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

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

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

    然后正常访问值:

    <%= nested_item['company_name'] %>
    

    【讨论】:

      最近更新 更多