我基本上想用link_to链接到控制器的索引方法。我试过了:
<%= link_to 'Recipes', Recipe %>
但是输出:
<a href="/recipes/Recipe">Recipes</a>
这显然是不对的,如果它不在最后一位,它会完全按照我的意愿行事。我认为,使用RESTful的东西,我会以某种方式开始忽略动作或类似的东西。我误解了什么?
答案 0 :(得分:6)
使用restful路由时,大多数时候你需要调用helper方法来生成路由。
例如:
link_to 'Recipes', recipes_path
有一个优化,您可以在其中传递配方对象,它将在幕后为您调用辅助方法:例如:
link_to 'Recipe X', @recipe
与
相同link_to 'Recipe X', recipe_path(@recipe)
然而,这只是一个特例。
您正在做的是传递食谱类本身,而不是有效的食谱对象。由于rails不知道要处理这个问题,所以作为后备,它只会在你给它的任何内容上调用.to_s
,然后将其提供给recipe_path
,这就是你看到奇怪URL的原因。 / p>
_path
辅助方法而不是_url
方法。 _url
为您提供完整的网址,例如http://stackoverflow.com/recipes/5
,而_path
只会为您提供/recipes/5
。
完整URL的问题在于,生产rails应用程序的大部分时间都是作为坐在负载均衡器后面的杂种运行,因此它认为它的主机名实际上是1.2.3.4
(或者内部LAN IP是什么)而不是真正的URL,因此将提供断开的链接。