2012-06-28 24 views
10

Estoy redirigiendo a https: al igual querieles redirect_to https, manteniendo todos los parámetros

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

Sin embargo, los parámetros no pasan por esta manera. Puedo pasar parámetros específicos a través de la siguiente manera:

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

¿cómo iba a hacerlo de modo que sólo pasa a través de cada parámetro en la URL en lugar de tener que declarar explícitamente cada parámetro?

Respuesta

22

lo descubrió:

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

Esto mantendrá todos los parámetros de URL a través de la redirección.

1

Si sólo necesita esta a nivel del controlador, puede utilizar:

MyController < ApplicationController 
    force_ssl 
end 

Puede usar: solamente o: excepto si sólo necesita esto en una determinada acción. Consulte la documentación:

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

Por otra parte, si lo que desea toda su aplicación para utilizar SSL (suponiendo carriles de 3.1 o mayores):

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

Se podía pasar params como un argumento así:

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

esto crearía 'params [: params] => {: Original => 'datos'}' en lugar de 'params [: originales] => 'data'' – TomDunning

1

con los carriles de 4.2 y anteriores, que pasa todo el params de hash dará lugar a la adición de ?controller=foo&action=bar a la cadena de consulta. En su lugar, usted debe hacer esto:

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