2013-12-23 37 views
0

我有我所用force_ssl方法如何强制SSL到特定的命名路线Rails中

def force_ssl # to use https for payment page 
    if !Rails.env.development? && !request.ssl? 
    redirect_to :protocol => 'https' 
    end 
end 

为特定的动作名称“ABC”与名为航线

匹配“Rails应用程序/找到-A-ABC” => “回家#ABC”

,当我去到URL

http://local.demo.com/find-a-abc

它会redirect_to https://local.demo.com/abc

任何解决方案?所以它会重定向到特定的路由,而不是在使用https协议时重定向到Action。

+0

将定义'force_ssl'作为'before_filter'工作? – benjaminjosephw

+0

是的,它工作完美,但我的问题是重定向到行动,而不是命名路径。 –

回答

0

看起来您并未在此处提供命名路线(即match '/find-a-abc' => "home#abc", :as => :named_route)。您需要执行此操作并致电named_route_url,而不仅仅是控制器和操作才能获取正确的URL。

如果你想有一个特定的路线始终与SSL处理,您可以定义像这样的路线:

scope :protocol => 'https://', :constraints => { :protocol => 'https://' } do 
    match '/find-a-abc' => "home#abc", :as => :abc 
end 

然后abc_url应该永远是“https://local.demo.com/find-a-abc

+0

谢谢,它的工作 –