Rails重定向到https,同时保留所有参数

时间:2012-06-28 21:08:29

标签: ruby-on-rails parameters

我正在重定向到https,如下所示:

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

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

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

我如何才能使它只是通过url上的每个参数而不必显式声明每个参数?

4 个答案:

答案 0 :(得分:24)

想出来:

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

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

答案 1 :(得分:3)

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

redirect_to protocol: 'https', params: request.query_parameters

答案 2 :(得分:1)

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

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

答案 3 :(得分:-1)

您可以将params作为这样的参数传递:

redirect_to :protocol => 'http://', :status => :moved_permanently, :params => params