在这种情况下,如何以 RESTfully 方式使用 Rails 帮助程序 link_to?

Posted

技术标签:

【中文标题】在这种情况下,如何以 RESTfully 方式使用 Rails 帮助程序 link_to?【英文标题】:How do I use the Rails helper link_to RESTfully in this situation? 【发布时间】:2010-09-15 22:21:48 【问题描述】:

我基本上想使用 link_to 链接到控制器的 index 方法。我试过了:

<%= link_to 'Recipes', Recipe %> 

但是输出:

<a href="/recipes/Recipe">Recipes</a>

这显然是不对的,如果它离开了最后一点,它会完全按照我的意愿去做。我认为使用 RESTful 的东西我会开始忽略动作或类似的东西。我误会了什么?

【问题讨论】:

【参考方案1】:

使用 restful 路由,大多数时候您需要调用辅助方法来生成路由。

例如:

link_to 'Recipes', recipes_path

有一个优化,你可以只传入一个配方对象,它会在幕后为你调用辅助方法:例如:

link_to 'Recipe X', @recipe

一样
link_to 'Recipe X', recipe_path(@recipe)

不过,这只是特例。

您正在做的是传递配方类本身,而不是有效的配方对象。由于 rails 不知道如何处理此问题,因此作为备用,它只会根据您提供的任何内容调用 .to_s,然后将其提供给 recipe_path,这就是您看到奇怪 URL 的原因。

提示:使用 _path 辅助方法而不是 _url 方法。

_url 为您提供完整的 URL,例如 http://***.com/recipes/5,而 _path 只为您提供 /recipes/5。 完整 URL 的问题在于,在生产过程中,您的 Rails 应用程序在很多时候都作为位于负载均衡器后面的杂种运行,因此它认为它的主机名实际上是 1.2.3.4(或任何内部 LAN IP)而不是而不是真实的 URL,因此将提供损坏的链接。

【讨论】:

你的第一个例子应该使用 recipes_path - 你想要索引操作。

以上是关于在这种情况下,如何以 RESTfully 方式使用 Rails 帮助程序 link_to?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?

如何在没有用户交互的情况下禁用 wifi 辅助

如何让msvsmon.exe 以服务方式运行

如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController

如何在有/没有转换的情况下以编程方式在绘图中使用 .ico 图像

如何以编程方式准确定位 UIColorwell?