我有一个搜索表单,其中显示了可供预订的房间,如果我预订房间并随后在浏览器中单击“后退”按钮,则仍显示搜索结果。当我回击时是否可以重新加载页面,以便用户不得不再次单击搜索按钮才能看到可用的房间?我只想要没有结果的默认搜索表单吗?我之前尝试过:
before_filter :set_cache_buster
def set_cache_buster
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
但这只是重新加载页面,而用户输入的参数仍在搜索中,因此它基本上显示与不重新加载相同的页面,谢谢
如果您的表单方法是“ GET”,则当您单击“后退”按钮时该页面将始终可用,并且查询字符串都位于url中。在许多情况下,这种效果是首选的,例如,您可以为Google搜索网址添加书签。
您可以将表单方法更改为“ POST”,因此该页面将不再可用。
添加
请谨慎使用。按照惯例,“ GET”用于获取数据,“ POST”用于添加一些数据。搜索表单是为获取数据而构建的,因此表单方法的约定为“ GET”,这里没有错。因此,仅在确实需要时更改它。
添加更多OP表示他无法更改表单方法
好吧,这是一个技巧,如果您希望搜索结果仅在单击按钮时出现,而不是带有参数的url。
这个想法是使用Javascript在单击按钮时附加一个新的隐藏输入,然后控制器验证此新参数是否存在。如果存在,则处理并返回结果,否则显示一些错误。
# JavaScript
$('#the_form button').on('submit', function() {
this.preventDefault();
this.parent.append('<input type="hidden" name="human_hit" value="yes" />');
this.parent.submit();
})
# Controller
def search
if params[:human_hit]
# Do search logic and deliver
else
redirect_to :back, alert: "You need to hit the button to search"
end
end
这是一个hack,未经验证,这个主意应该可以解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句