单击时更新控制台中的参数和调用操作?

时间:2013-03-24 07:56:41

标签: ruby-on-rails ruby ruby-on-rails-3

过去3天我一直在讨论这个问题(不开玩笑!!!)....这似乎是一件非常简单的事情,但我无法做到。所以我在这里提出问题,并对任何可行的方法持开放态度。

背景:提交时使用的高级搜索表单用于生成对服务器来说太大的URL。所以表格必须通过POST提交。到现在为止还挺好。表单已成功提交,并显示结果。唯一剩下的问题是分页。

由于这是一个POST电话,它排除了分页。虽然will-pagination将param页面合并到现有的params,但问题是它在url上显示会导致相同的错误。

问题:有没有办法,如果用户点击链接NEXT,我可以

a)更新页面参数

b)保留现有的参数

c)虽然没有更改网址

d)将控制权转移回控制器中的动作?

到目前为止建议的唯一解决方案是隐藏形式,重新填充它的价值并再次提交。表格非常复杂,所以如果有一种更清洁的方式我想知道。

2 个答案:

答案 0 :(得分:1)

我从你的评论中看到了你想要的东西。所以相应地编辑我的回复。您希望控制器可以使用排序中选择的列的信息,而不必在url字符串中提供该信息,并且您希望使用GET而不是POST

您面临的挑战是您希望在请求之间保留状态,并且您需要一种机制来执行此操作。 POST通过在POST请求的主体中发送信息来保留该信息。 GET通过允许您填充查询字符串来实现此目的。另一种保存状态的方法是使用cookie。

您可以在页面上使用javascript操作网址。有在线教程。

但是如果你只想要一个简单的控制器hack,就像你在评论中所说的那样,我能想到的最简单的一个就是允许用户向其中的查询参数发出GET请求,然后处理这个请求分两个步骤 - 第一步将查询信息保存到cookie,第二步将它们重定向到带有查询字符串数据剥离的URL,然后在构建该页面的数据之前查看cookie以查看它是否具有这些字段。这很hacky但它​​确实有效。

def sort
  session[:sort] = params[:sort]
  redirect_to url_without_the_query_string
end

还有新的html 5功能:

window.history.replaceState(“Replace”, “Page Title”, “/mypage”);

来自此stackoverflow的答案:How to remove query string from url using javascript

但是我不确定我是否建议在加载之后弄乱网址(我对该解决方案知之甚少,所以我建议你阅读那个答案,看看是否合适)。因此,如果您必须从url字符串中丢失该数据,因为您需要以某种方式在请求之间传递它,您必须使用POST,或使用我在上面描述的会话cookie /重定向方法。

答案 1 :(得分:0)

您的html <form>是否有action属性?如果没有,请添加一个指向该页面的内容。

如果你想保留当前的GET参数以便POST的结果可以使用,你还需要修改标题链接上触发的javascript,以便(或代替)修改查询字符串,将相同的数据写入隐藏的表单字段(当然然后将其发布在请求的正文中)。您的JS库可能已经包含了有用的功能。