rails中的外部链接路由

时间:2012-06-13 11:20:37

标签: ruby-on-rails ruby url path routes

足够简单。什么时候制作一个典型的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的最佳方式。路径?变量?其他? 任何输入赞赏

4 个答案:

答案 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)

301-重定向

关于在路线文件中使用redirect(...)的说明。 Redirect生成301重定向,这是特定的事情,Google将其描述为......

  

如果您需要更改搜索中显示的网页网址   引擎结果,我们建议您使用服务器端301重定向。   这是确保用户和搜索引擎的最佳方式   指向正确的页面。 301状态代码表示页面   已经永久搬到了新的地方。

因此,在您的路线中使用301重定向链接到外部网站可能会有效,但是该重定向带来的状态信息不正确。

如果您在网页应用中移动了网页并希望告诉Google索引(以及其他所有人),那么请务必使用redirect()确保Google更新索引,但这并非最佳用于Web应用程序之外的标准外部链接。