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