13

我像这样重定向到https:

redirect_to :protocol => 'https://', :status => :moved_permanently

但是,参数不会像这样通过。我可以像这样传递特定的参数:

redirect_to :protocol => 'https://', :status => :moved_permanently, :param1 => params[:param1], :param2 => params[:param2]

我将如何使它只传递 url 上的每个参数,而不必显式声明每个参数?

4

4 回答 4

25

弄清楚了:

redirect_to({:protocol => 'https://'}.merge(params), :flash => flash)

这将通过重定向保留所有 URL 参数。

于 2012-06-28T21:56:07.137 回答
5

对于 Rails 4.2 及更高版本,传递整个params哈希将导致添加?controller=foo&action=bar到查询字符串中。相反,您应该这样做:

redirect_to protocol: 'https', params: request.query_parameters
于 2016-10-14T18:47:34.653 回答
1

如果您只需要在控制器级别,您可以使用:

MyController < ApplicationController
  force_ssl
end

您可以使用 :only 或 :except 如果您只需要在某个操作上使用它。请参阅文档:

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
于 2012-06-28T21:14:30.463 回答
-1

您可以将 params 作为参数传递,如下所示:

redirect_to :protocol => 'http://', :status => :moved_permanently, :params => params 
于 2013-10-10T17:33:57.770 回答