我们通过GET请求获得了多步骤表单的特殊要求。因此,我们使用GET请求将新参数传递给查询,而不是POST表单。所以,基本的想法是有一个处理,并将日期传递给查询。如果你愿意,可以采用三步法。
网址将经历以下状态
所以,我的路线看起来像这样:
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
我不认为有人知道吗?
答案 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¶m2=value2&...
)。要摆脱这些,您必须开始使用POST
或在收到GET
请求后立即重定向到所需的网址。
我更喜欢重定向方法,因为当用户刷新浏览器时,它没有显示有关重新提交POST数据的令人困惑/恼人的消息。