在这种情况下,如何使用Rails helper link_to RESTfully?

Fre*_*idt 3 rest ruby-on-rails

我基本上想用link_to链接到控制器的索引方法.我试过了:

<%= link_to 'Recipes', Recipe %> 
Run Code Online (Sandbox Code Playgroud)

但那个输出:

<a href="/recipes/Recipe">Recipes</a>
Run Code Online (Sandbox Code Playgroud)

这显然是不对的,如果它停止了最后一点它会完全按我想要的那样做.我认为,使用RESTful的东西,我会以某种方式开始忽略动作或类似的东西.我有什么误会?

Ori*_*rds 6

对于宁静的路由,大多数时候您需要调用辅助方法来生成路由.

例如:

link_to 'Recipes', recipes_path
Run Code Online (Sandbox Code Playgroud)

有一个优化,您只需传入一个配方对象,它将在幕后为您调用辅助方法:例如:

link_to 'Recipe X', @recipe
Run Code Online (Sandbox Code Playgroud)

是相同的

link_to 'Recipe X', recipe_path(@recipe)
Run Code Online (Sandbox Code Playgroud)

但是,这只是一个特例.

你正在做的是传递配方类本身,而不是有效的配方对象.因为rails不知道要处理这个问题,所以作为一个后备,它只会调用.to_s你给它的任何东西,然后将其赋予recipe_path,这就是你看到奇怪的URL的原因.

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

_url为您提供完整的URL,http://stackoverflow.com/recipes/5_path只是给你/recipes/5.
完整URL的问题在于,生产rails应用程序的大部分时间是作为坐在负载均衡器后面的杂种运行的,所以它认为它的主机名实际上1.2.3.4(或者内部LAN IP是什么)而不是真实的URL等等将提供断开的链接.