2009-01-23 90 views
4

我正在关注Rails的this tutorial(看起来不错)。这个“posts_path”变量在哪里定义?

<%= link_to "My Blog", posts_path %> 

为什么:我跑

ruby script/generate scaffold Post 

后那么这个链接的ERB文件的一个作品?我在整个应用程序中寻找“posts_path”,无处可寻。在另一方面,这

<%= link_to "My Blog", home_path %> 

工作,它也是一个控制器。

posts_path在哪里定义?

回答

14

posts_path是您从script/generate scaffold添加的路线中免费获得的命名路线。见routes.rb你应该看到这样的事情:

map.resources :posts 

免费查看API docs for information on what other named routes you get

此外,你可以运行rake routes,看看你所有的routes.rb是给你。

如果你想要一个名为路线home_path这样的行添加到您的routes.rb

map.home '/home', :controller => "home", :action => "index" 
+0

太棒了!如你所知,这工作。仍然想知道为什么我需要这条巨大的线路作为“家”,而我只需要map.resources发布信息,但我想它很快就会清晰地......或者在阅读完API文档之后。再次感谢! – 2009-01-23 21:53:55

+0

更长,因为它正在脱离RESTful路由约定。你可以这样做:map.resource:home 注意非复数的资源。这会给你一个名为route的home_path去到那个控制器,但你会被困在/ home。另一种方式,你可以指定任何你想要的。 – Otto 2009-01-24 00:45:44

1

我相信“posts_path”是动态生成的Rails在运行时创建。看看你的routes.rb文件 - Home的定义可能与Posts不同。它与你的控制器无关,它依赖于路由定义。

1

map.root :controller => "home"将是写入主目录路径的一种较短的方式。这将使用/有家,而不是/家。如果您仍想使用/ home(和home_path),则map.home 'home', :controller => "home"将执行相同的操作。

有一个great guide written by Mike Gunderloy关于路由的一切知道。