ruby on rails,重定向,如果在浏览器中按回按钮

时间:2013-08-20 09:16:35

标签: ruby-on-rails redirect reload back-button search-form

我有一个搜索表单,显示可预订的房间,如果我预订房间并在之后点击浏览器中的后退按钮,搜索结果仍会显示。当我回击时是否可以重新加载页面,以便用户必须再次单击搜索按钮以查看可用的房间?我只想要没有结果的默认搜索表单? 我之前试过这个:

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

但这只是重新加载页面,用户输入参数仍然在搜索中,所以它基本上显示相同的页面而不重新加载, 谢谢

1 个答案:

答案 0 :(得分:2)

如果您的表单方法是“GET”,当您点击后退按钮并且查询字符串全部在url中时,页面始终可用。在许多情况下,首选此效果,例如您可以为Google搜索网址添加书签。

您可以将表单方法更改为“POST”,以便页面不再可用。

添加

请谨慎使用。在惯例中,“GET”用于获取数据,“POST”用于添加一些数据。为获取数据构建了一个搜索表单,因此表单方法的约定是“GET”,这里没有错。所以只有在你真的需要的时候才改变它。

添加更多 OP表示他无法更改表单方法

嗯,如果您希望搜索结果仅在点击按钮时出现,而不是带有参数的网址,那么这是一个黑客攻击。

想法是在单击按钮时使用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

这是一个黑客而且没有经过验证,这个想法应该能够解决问题。