使用GET请求的多步骤表单

时间:2010-10-15 18:15:48

标签: ruby-on-rails

我们通过GET请求获得了多步骤表单的特殊要求。因此,我们使用GET请求将新参数传递给查询,而不是POST表单。所以,基本的想法是有一个处理,并将日期传递给查询。如果你愿意,可以采用三步法。

  1. 显示可用的治疗方法,选择一个
  2. 显示可用日期(后台有业务逻辑来计算这些日期)
  3. 选择一个时间
  4. 网址将经历以下状态

    1. site.com/bookings/new
    2. site.com/bookings/new/ [id | name_of_treatment](我的意思是它可以通过ID字段或处理名称)
    3. site.com/bookings/new/ [ID | name_of_treatment] / 2010-12-12 /
    4. 所以,我的路线看起来像这样:

      map.connect 'bookings/new/:massage_type/:date', :controller => :bookings, :action => :new
      

      massage_type与treatment_id同义。

      所以我的form_tag看起来像这样:

      <% form_tag( {:action => "new"}, :method => "get" ) do %>
      

      我遇到的问题是我希望它只是将网址http://.com/bookings/new/[id|name_of_treatment]/给我回复,但它会返回以下网址:

      http://localhost:3000/bookings/new?massage_type[treatment_id]=1&commit=actionnew
      

      我不认为有人知道吗?

2 个答案:

答案 0 :(得分:1)

使用GET的表单将输入值添加为查询参数。没有办法让表单发布到不同的URL,其中输入值是URL的一部分 - 而HTML标准不支持它。

您可以使用URL重写将此类型的传入URL重新映射到您想要的URL,但这不是一个好的解决方案,因为这会导致第二个请求。

但是,我不明白为什么表单需要对该特定URL进行GET。是否要求用户手动构建这些URL,而不是使用表单?

如果没有此类要求,我建议您使用标准POST表单http://localhost:3000/bookings/new,并根据POST正文中的参数修改回复中的表单

更好的是,编写一些Ajax,根据用户的选择更新表单,而不是完整的表单提交,直到用户完成所有选择。

答案 1 :(得分:0)

根据定义,GET请求的结果将在其URL中包含查询字符串(?param1=value1&param2=value2&...)。要摆脱这些,您必须开始使用POST或在收到GET请求后立即重定向到所需的网址。

我更喜欢重定向方法,因为当用户刷新浏览器时,它没有显示有关重新提交POST数据的令人困惑/恼人的消息。