在rails中路由到/ post / new而不是/ posts / new?

时间:2016-10-07 08:00:59

标签: ruby-on-rails ruby

这与我在此问的问题有关:undefined method `posts_path' for #<#<Class:0x007fe3547d97d8>:0x007fe3546d58f0>

我被告知要将我的控制器,视图等从“post”切换到“posts”来修复问题,但是如果我确实想要使用URL / post / new,我怎么能这样做而不接收“undefined”方法`posts_path'“我以前的错误?

当我的控制器,模型和视图都被称为“post”时,我不明白它为什么要寻找“posts_path”。

2 个答案:

答案 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定义单例资源,在这种情况下,您说您只有一个这样的东西。对于单身人士来说,帮助者和路线略有不同。但我现在很少见到它。