Ответ 1
Выяснилось:
redirect_to({:protocol => 'https://'}.merge(params), :flash => flash)
Это позволит сохранить все URL-адреса через перенаправление.
Я перенаправляю на 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-адреса через перенаправление.
Если вам нужно только это на уровне контроллера, вы можете использовать:
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
С Rails 4.2 и выше, передача всего хэша params
приведет к добавлению ?controller=foo&action=bar
к querystring. Вместо этого вы должны сделать это:
redirect_to protocol: 'https', params: request.query_parameters
Вы можете просто передать параметры как аргумент, подобный этому:
redirect_to :protocol => 'http://', :status => :moved_permanently, :params => params