足够简单。什么时候制作一个典型的restful rails应用程序,我们会将所有路由保留在我们的应用程序中。路径很少会链接到外部路径。但如果我们这样做,我想知道最好的方法是什么。
典型的家庭匹配
match "home"=>"appcontroller#home"
如果我们将外部网址与路径变量匹配。我们可能会做类似下面的事情吗?
的routes.rb
match "external"=>"http:/www.google.ie"
然后在我们的html.erb
中<%= link_to 'Google', external_path %>
请注意,这实际上并不是一种合法的做事方式,但可能存在类似的情况。它似乎非常接近当前在轨道中定义路径但具有外部着陆的方式。
我在别处看到的一些事情是为外部URL创建一个全局变量并在链接中使用它。例如。 在environment.rb或production.rb或其他什么
@ext_path="http:/www.google.ie"
然后在我们的html.erb
中<%= link_to 'Google', @ext_path %>
所以回顾一下。什么是在rails中使用外部URLS的最佳方式。路径?变量?其他? 任何输入赞赏
答案 0 :(得分:1)
我只会在视图中保留外部链接。因为这个链接与应用程序的任何逻辑都没有关系,所以它只是一个UI元素。
所以,这种方式在我看来是最好的:
<%= link_to 'Google', "http://google.ie" %>
如果您需要多次使用此元素,也许将此代码放入帮助程序是有意义的,例如:
def search_engine_link
link_to 'Google', "http://google.ie"
end
而且我认为这不是引入更复杂逻辑的好地方。
答案 1 :(得分:1)
我可能会使用围绕常量的应用程序范围的助手。
助手,因为我宁愿不在模板中看到常量,也看不到环境特定值的常量。
我可能会使用哈希来存储URL:这会使它们保持更紧密耦合,并允许环境范围内的默认值,并根据需要覆盖每个环境。
帮助程序可以使用符号生成符号,也可以从哈希键生成符号,以生成xxx_path
方法,与routes.rb
中的路由一样。
答案 2 :(得分:1)
I found myself needing to do this because I had a link to an external site which I intended to make local in future.
In Rails 4 you can add this to config/routes.rb
:
get '/contact',
to: redirect('http://www.example.com/contact.php'),
as: 'contact_us'
Which at the price of an extra redirect, lets you write:
<%= link_to "Contact us", contact_us_path %>
答案 3 :(得分:0)
关于在路线文件中使用redirect(...)
的说明。 Redirect
生成301重定向,这是特定的事情,Google将其描述为......
如果您需要更改搜索中显示的网页网址 引擎结果,我们建议您使用服务器端301重定向。 这是确保用户和搜索引擎的最佳方式 指向正确的页面。 301状态代码表示页面 已经永久搬到了新的地方。
因此,在您的路线中使用301重定向链接到外部网站可能会有效,但是该重定向带来的状态信息不正确。
如果您在网页应用中移动了网页并希望告诉Google索引(以及其他所有人),那么请务必使用redirect()
确保Google更新索引,但这并非最佳用于Web应用程序之外的标准外部链接。