在这种情况下,如何以 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 的情况下以模态方式呈现自定义视图?
如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController