【问题标题】:ruby on rails, redirect if hitting back button in browserruby on rails,如果在浏览器中点击后退按钮,则重定向
【发布时间】:2013-08-22 06:47:59
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如果你的表单方法是“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,未经验证,这个想法应该可以解决问题。

    【讨论】:

    • 是的,但我无法更改方法,否则我的搜索将无法进行
    • 为什么要在返回时禁用搜索?我认为这没有多大意义。
    • 我不想在返回时禁用搜索,我只想重新加载页面,而不是 url 中的搜索参数。
    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2011-06-17
    相关资源
    最近更新 更多