我正在重定向到https,如下所示:
redirect_to :protocol => 'https://', :status => :moved_permanently
但是,参数不会像这样经过。我可以像这样传递特定的参数:
redirect_to :protocol => 'https://', :status => :moved_permanently, :param1 => params[:param1], :param2 => params[:param2]
我如何才能使它只是通过url上的每个参数而不必显式声明每个参数?
答案 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