Rails重定向到https,同时保留所有参数
我正在重定向到https,如下所示:
redirect_to :protocol => 'https://', :status => :moved_permanently
但是,参数不会像这样经过。 我可以像这样传递特定的参数:
redirect_to :protocol => 'https://', :status => :moved_permanently, :param1 => params[:param1], :param2 => params[:param2]
我如何才能使它只是通过url上的每个参数而不必显式声明每个参数?
弄清楚了:
redirect_to({:protocol => 'https://'}.merge(params), :flash => flash)
这将通过重定向保留所有URL参数。
如果您只需要在控制器级别使用此function,则可以使用:
MyController < ApplicationController force_ssl end
您可以使用:only或:除非您在某个操作上仅需要此操作。 见文档:
http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
或者,如果您只是希望整个应用程序使用ssl(假设rails 3.1或更高版本):
# config/application.rb module MyApp class Application < Rails::Application config.force_ssl = true end end
使用Rails 4.2及更高版本,传递整个params
哈希将导致向查询字符串添加?controller=foo&action=bar
。 相反,你应该这样做:
redirect_to protocol: 'https', params: request.query_parameters
您可以像这样将params作为参数传递:
redirect_to :protocol => 'http://', :status => :moved_permanently, :params => params