这与我在此问的问题有关:undefined method `posts_path' for #<#<Class:0x007fe3547d97d8>:0x007fe3546d58f0>
我被告知要将我的控制器,视图等从“post”切换到“posts”来修复问题,但是如果我确实想要使用URL / post / new,我怎么能这样做而不接收“undefined”方法`posts_path'“我以前的错误?
当我的控制器,模型和视图都被称为“post”时,我不明白它为什么要寻找“posts_path”。
答案 0 :(得分:0)
在routes.rb文件中的resources :posts
行/块之前添加此内容,
get '/post/new', to: 'posts#new'
使用resources :posts
定义路由时,默认情况下new
操作的路由为/posts/new
,因此要覆盖您需要定义的自定义路由,就像我上面所做的那样。此外,为了搜索路由,Rails从上到下扫描routes.rb
文件,无论先采取什么匹配。因此,为了覆盖默认行为,我要求您在默认路由之前定义此自定义路由。
希望有所帮助!
答案 1 :(得分:0)
我建议你看看Rails Routing Guide。 简而言之:
因为模型Post
只描述了一条记录,所以它可以调用模型Post
而不是帖子。
在resources :posts
中使用routes.rb
定义您将拥有多个Post
个对象,并希望通过控制器通过restfull接口公开所有CRUD操作。您的控制器名为PostsController
,因为您的控制器为所有Post
个对象提供CRUD操作,而不仅仅是一个。
更多的rails为每个定义的路径生成一些帮助:
posts_(path|url) returns /posts=> shows multiple posts => plural helper name
new_post_(path|url) returns /posts/new => show one post for edit => singular helper name
edit_post_(path|url)(:id) returns /posts/:id/edit => edit one post => singular helper name
photo_(path|url)(:id) => show one post => singular helper name
路由名称始终为复数,因为您始终在更改资源。例如,在帖子资源中添加一个新帖子。
您还可以通过resource :geocoder
定义单例资源,在这种情况下,您说您只有一个这样的东西。对于单身人士来说,帮助者和路线略有不同。但我现在很少见到它。