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