0

很简单。在制作典型的 restful rails 应用程序时,我们会将所有路线保留在我们的应用程序中。很少有路径链接到外部路径。但如果我们要这样做,我想知道最好的方法是什么。

典型的家居搭配

match "home"=>"appcontroller#home"

如果我们将外部 url 与路径变量匹配。我们可能会做类似下面的事情?

第一种方法

路由.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 中使用外部 URL 的最佳方式是什么?路径?变量?其他?任何输入表示赞赏

4

4 回答 4

1

我只会在视图中保留外部链接。因为这个链接与应用程序的任何逻辑都无关,它只是一个 UI 元素。

所以,这种方式在我看来是最好的:

<%= link_to 'Google', "http://google.ie" %>

如果你需要多次使用这个元素,也许把这段代码带入帮助器是有意义的,例如:

def search_engine_link
  link_to 'Google', "http://google.ie"
end

而且我真的认为这不是引入更复杂逻辑的好地方。

于 2012-06-13T11:28:51.597 回答
1

我可能会使用围绕常量的应用程序范围的助手。

助手,因为我宁愿在模板中看不到常量,也不想看到环境特定值的常量。

我可能会使用散列来存储 URL:这会使它们更紧密地耦合,并允许环境范围的默认值,并根据需要覆盖每个环境。

帮助程序可以使用符号,或者从哈希键生成,以生成xxx_path方法,就像routes.rb.

于 2012-06-13T11:29:22.987 回答
1

我发现自己需要这样做,因为我有一个指向外部站点的链接,我打算在未来将其本地化。

在 Rails 4 中,您可以将其添加到config/routes.rb

get '/contact', 
      to: redirect('http://www.example.com/contact.php'), 
      as: 'contact_us'

以额外重定向为代价,您可以编写:

<%= link_to "Contact us", contact_us_path %>
于 2015-10-30T22:27:53.517 回答
0

301 重定向

关于 redirect(...)在路由文件中使用的注释。Redirect生成一个 301 重定向,这是一个特定的东西,谷歌将其描述为...

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

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

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

于 2016-01-20T12:27:37.627 回答