获取Rails URL帮助程序以自动输出https URL

时间:2011-07-14 21:02:46

标签: ruby-on-rails ruby ssl routes

我正在开发一个混合了http和https的网站 - 最简单/最简单的方法是让链接使用正确的路由协议 - 是否可以在路由文件中指定?

说我在Rails 3中有以下路由。

match "/test" => "test#index", :as => :test, :constraints => { :protocol => 'https' }

如果我在http页面上,并且我使用test_url(),则会输出http://domain.com/test。我想改为https://domain.com/test

我知道我可以使用test_url(:secure => true),但这是重复的逻辑。

我知道我可以http://domain.com/testhttps://domain.com/test,但这是一个额外的重定向,加上它在表单帖子上失败。

想法?

7 个答案:

答案 0 :(得分:24)

test_url(:protocol => 'https')用于https网址。

答案 1 :(得分:19)

尚未尝试,但在ApplicationController

中添加此内容
def default_url_options(options={})
 { :secure => true }
end 

答案 2 :(得分:5)

def default_url_options(options={})
 { :protocol => "https" }
end

答案 3 :(得分:2)

答案 4 :(得分:2)

对于Rails 3.2,我使用了@ apneadiving的答案。将以下代码添加到我的 ApplicationController

def default_url_options(options={})
  options.merge{ :protocol => "https" }
end

答案 5 :(得分:1)

Rails 3 SSL routing redirects from https to http很好地回答了这个问题。简而言之,没有一个很好的方法来做到这一点。我提交了以下Rails错误:https://github.com/rails/rails/issues/3571

答案 6 :(得分:-1)

您可以使用名为ss_requirement的插件,它会为您提供类似的方法 ssl_required ssl_allowed

您只需在控制器中添加此项即可在任何操作

上启用或禁用https
ssl_allowed :login, :update_profile

https://github.com/rails/ssl_requirement