我的设置: Rails 3.0.9,Ruby 1.9.2
我的应用要求只保护网站的某个部分,而其余部分不需要SSL保护。如果有人认为这不是正常行为,请看看亚马逊。当仅浏览产品时,它处于HTTP模式,结账时会切换到HTTPS。即使在进行安全的结账交易过程中,页面上还有几个仅使用HTTP的链接。
我看了ssl_requirement gem,决定不使用它,因为它不能完全满足我的需求。最后,我设置了特定的SSL路线,如:
resources :projects do
resources :tasks, :constraints => { :protocol => "https" }
end
在我的代码中,针对HTTP特定链接。
<%= link_to 'Projects', project_url(@project, :protocol => "http") %>
并且处理HTTPS特定链接
<%= link_to 'Task', new_project_task_url(@project, :protocol => "https") %>
我知道这不是最好的方法,但这是我决定采用的方式。这种设置的问题在于如何在每个页面上正确设置HTTP和HTTPS链接。有一个提议的解决方案在这里,但它需要对_path进行全面更改为_url,如果可能的话,我更愿意避免这样做。该解决方案涉及添加以下方法:
application_helper.rb
module ApplicationHelper
def url_for(options = nil)
if Hash === options
options[:protocol] ||= 'http'
end
super(options)
end
end
所以我的问题是,是否可以更改此方法或另一个方法以将_path调用更改为显式URL,以便我可以使用上述方法设置正确的协议。
url_for
。我正在尝试找到一种方法,不必从_path
更改为_url
或者可能我误解了您的意图。 - Boburl_for
函数,并启用:only_path
选项,但当指定了一个主机时,:only_path
选项将被忽略。 - sled_path
是否在后台调用了url_for
,我该去哪里阅读_path
助手的源代码呢?你知道吗?有人知道吗? - Bob