2012-06-28 10 views
10

मैं तो जैसे https के लिए पुनः निर्देशित कर रहा हूँ रखते हुए:रेल redirect_to https सभी मापदंडों

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

हालांकि, मानकों के माध्यम से इस तरह नहीं जाते। मैं इस तरह विशिष्ट मानदंडों के माध्यम से पारित कर सकते हैं:

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

मैं इसे कैसे बनाना होगा ताकि यह बजाय स्पष्ट रूप से प्रत्येक पैरामीटर घोषित करने के लिए होने के यूआरएल पर हर पैरामीटर से होकर गुजरता है?

उत्तर

22

यह पता चल:

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

यह रीडायरेक्ट के माध्यम से सभी यूआरएल पैराम रखेगा।

1

आप केवल नियंत्रक स्तर पर इस की जरूरत है, तो आप उपयोग कर सकते हैं:

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 
-1

आप सिर्फ इस तरह एक तर्क के रूप पैरामीटर गुजर सकता है:

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

इस 'पैरामीटर बन जाएगा [: पैरामीटर] => {: मूल => 'डेटा'}' बजाय 'पैरामीटर [: मूल] => 'data'' – TomDunning

1
रेल 4.2 और इसके बाद के संस्करण के साथ

, पूरे params हैश गुजर क्वेरी स्ट्रिंग के लिए ?controller=foo&action=bar जोड़ने का परिणाम देगा। इसके बजाय, आप इस करना चाहिए:

redirect_to protocol: 'https', params: request.query_parameters 
संबंधित मुद्दे