2012-06-28 1 views
10

ich zu https Umleitung wie folgt:Rails redirect_to https während alle Parameter halten

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

jedoch die Parameter gehen nicht wie diese durch. Ich kann bestimmte Parameter übergeben, wie dies durch:

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

Wie würde ich es so machen, dass es nur durch jeden Parameter in der URL geht stattdessen explizit zu müssen, jeden Parameter erklären?

Antwort

22

es herausgefunden:

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

Dadurch werden alle URL-Parameter über die Weiterleitung beibehalten.

1

Wenn Sie nur diese auf Controller-Ebene benötigen, können Sie verwenden:

MyController < ApplicationController 
    force_ssl 
end 

Sie verwenden können: nur oder: es sei denn, Sie brauchen nur diese auf einer bestimmten Aktion. Siehe Dokumentation:

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

Alternativ, wenn Sie nur Ihre gesamte App SSL verwenden möchten (vorausgesetzt, Schienen 3.1 oder höher):

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

Sie könnten nur params als Argument wie folgt passieren:

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

diese 'params schaffen würde [: params] => {: Original => 'data'}' statt 'params [: Original] =>‚data'' – TomDunning

1

Mit Rails 4.2 und höher, führt die gesamte params Hash vorbei ?controller=foo&action=bar zum Abfragezeichenfolgeflag in hinzufügen. Stattdessen sollten Sie dies tun:

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