如何在Ruby on Rails中通过请求保留查询字符串值?
当我觉得必须有一种比我最终得到的更好的方式时,我正面临着与Rails合作的那些时刻之一。如何在Ruby on Rails中通过请求保留查询字符串值?
我有四个查询字符串参数,我希望通过一个rails应用程序的各个部分保存请求 - 不同的控制器和操作,一些通过javascript呈现 - 以便用户最终在具有相同查询字符串参数的URL开始。
我发现很难相信最好的方式是通过隐藏的表单字段,并手动添加参数作为redirect_to的一部分,或者使用每个会话变量 - 它似乎不像轨道一样。
有谁知道更好的方法来管理这个?
谢谢!
在这种情况下,我会经常使用一个辅助函数来创建基于当前参数集的url。换句话说,我想定义这个:
def merge_params(p={})
params.merge(p).delete_if{|k,v| v.blank?}
end
然后用它与url_for为您的窗体和链接创建网址。如果您需要修改和则params的,只是将它们传递到合并:
# url for the current page
url_for(merge_params)
# url for a different action
url_for(merge_params(:controller => 'bar', :action => 'bar'))
# et cetera
url_for(merge_params(:action => 'pasta', :sauce => 'secret'))
这会保留现有PARAMS加任何覆盖您在合并
如果你想始终保持一定的参数进行的跨每一个生成的URL,你都可以在你的应用中实现一个default_url_parameters方法。
这是记录不完整,但mentioned in the Rails 18n Guide
在application_controller.rb实现:
def default_url_options(*args)
super.merge(
:foo = params[:foo],
:bar = params[:bar]
)
end
现在,通过Rails的生成的每个URL将包括当前请求的值foo
和bar
(除非网址是正在生成,指定那些具体是别的东西)。
这不会工作..在代码=应该是=>中的错误,但它仍然无法正常工作..即使在使用rails命名路径时,我有一个jquery功能,可以在少数页面上工作,但不是全部。 – whizcreed 2015-04-13 06:02:58
请注意,这不是一个铁轨解决方案,但在80%的情况下适用于我。这是我能够用jQuery实现这一点的,显然不是最好的方法。而我无法使它工作的链接过去的2级:
function mergeGPS(){
var lat = getParam('lat');//localStorage.getItem('lat');
var lng = getParam('lng');//localStorage.getItem('lng');
if(lat == null || lng == null){return false;}
var links = jQuery("a");
jQuery.each(links, function(y, lnk){
//debugger;
var uri = jQuery(lnk).attr('href') + "?lat="+lat+"&lng="+lng;
jQuery(lnk).attr('href',uri);
//debugger;
})
}
function getParam(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
mergeGPS需要在页面加载时被调用。
为什么不把它们放在会话中?你可以多谈一些他们的用途,为什么把他们放在会议或数据库中不适合你? – PreciousBodilyFluids 2010-11-17 04:54:33
没有那么多,它不起作用,只是令我惊讶的是,这不是一些Rails的优点,这使得不需要。至于我在做什么的细节,我保存在jQuery覆盖(由rails视图呈现)中的表单中的项目,并保存后,我希望用户查看基于相同参数的页面就像他们离开时一样。这些参数用于日期和应用程序特定的视图配置。 – evanmcd 2010-11-17 04:57:06