Rails redirect_to https, сохраняя все параметры

Я перенаправляю на https так:

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

Однако параметры не проходят так. Я могу передать конкретные параметры следующим образом:

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

Как я могу сделать это так, чтобы он просто проходил через каждый параметр на url вместо того, чтобы явно объявлять каждый параметр?

Ответ 1

Выяснилось:

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

Это позволит сохранить все URL-адреса через перенаправление.

Ответ 2

Если вам нужно только это на уровне контроллера, вы можете использовать:

MyController < ApplicationController
  force_ssl
end

Вы можете использовать: только или: кроме случаев, когда это необходимо только для определенного действия. См. Документацию:

http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html

Кроме того, если вы просто хотите, чтобы все ваше приложение использовало ssl (предполагая рельсы 3.1 или выше):

# config/application.rb
module MyApp
  class Application < Rails::Application
    config.force_ssl = true
  end
end

Ответ 3

С Rails 4.2 и выше, передача всего хэша params приведет к добавлению ?controller=foo&action=bar к querystring. Вместо этого вы должны сделать это:

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

Ответ 4

Вы можете просто передать параметры как аргумент, подобный этому:

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