带有url查询参数选项的Rails 5 redirect_back

时间:2018-06-27 03:46:23

标签: ruby-on-rails-5

根据docs

  

redirect_back(fallback_location :, allow_other_host:true,** args)
  

  • class="${question.questionId}"-默认的后备位置,将用于缺少的:fallback_location标头。

  •   
  • Referer-允许或禁止重定向到与当前主机不同的主机,默认为true。

  •   可以传递给redirect_to的所有其他选项都被接受为选项,并且行为相同。

    :allow_other_host允许我通过将参数作为散列传递给URL添加参数

    那么,为什么这些都不对我有用:

  • redirect_to
  • redirect_back fallback_location: tasks_path, allow_other_host: false, syncing: true
  • redirect_back fallback_location: tasks_path, allow_other_host: false, { syncing: true }
  • redirect_back fallback_location: tasks_path, allow_other_host: false, options: { syncing: true }
  • redirect_back(fallback_location: tasks_path, allow_other_host: false, options: { syncing: true })
  • ...以及上面我想到的其他任何迭代方式。

    所有这些(都是有效的代码),只需返回我而无需添加参数

    我正在尝试获取以下URL: redirect_back(fallback_location: tasks_path, allow_other_host: false, syncing: true)

    4 个答案:

    答案 0 :(得分:1)

    如果查看redirect_back的{​​{3}},您会发现它实际上使用了redirect_to "whatever_url.com"方法的redirect_to版本。

    如果您勾选source code,您会发现在这种用例中您很遗憾不能传递任何参数。如果超级需要这样做,我想您可以重写redirect_back方法,以使用字符串串联将params选项附加到url,但这似乎是一个讨厌的解决方法。

    但是要回答您的问题-要实现的目标似乎是不可能的。

    答案 1 :(得分:1)

    您还可以为Flash对象添加值,例如flash[:my_value] = '123',然后在下一个请求中访问它

    答案 2 :(得分:0)

    虽然我明白@Kkulikovskis的看法,但我认为这些文档令人困惑,因为他们建议我可以再通过*args,并让他们像对redirect_to那样做出回应。

    所以,我写了一个辅助方法:

    def redirect_back_for_sync
      if request.env['HTTP_REFERER'].present? &&
         request.env['HTTP_REFERER'] != request.env['REQUEST_URI']
        redirect_to request.env['HTTP_REFERER'] + '?syncing=true'
      else
        redirect_to properties_path(syncing: true)
      end
    end
    

    现在,我可以在控制器中调用redirect_back_for_sync,而不用完全使用redirect_back

    答案 3 :(得分:0)

    我刚才遇到了同样的问题。虽然找不到直接的解决方案,但我要做的是创建一个会话并将参数存储在该会话中。重定向后,我的控制器可以从会话中获取参数,然后将其删除。 并不是真正的“铁路方式”,而是得到我需要的东西。

    希望有帮助。