路由错误 – 没有路由匹配“/ posts / new”

我正在浏览rubyonrails.org的“博客教程”,当我尝试提交“post”时出现此错误:路由错误 – 没有路由匹配[POST]“/ posts / new”

我将教程中的代码复制并粘贴到我的代码中。 这应该返回一个带有文章和post标题的哈希值,但是我得到了上面的错误。

这是我的观点:

 



这是我的控制器:

 class PostsController < ApplicationController def new end def create render text: params[:post].inspect end end 

这是我的routes.rb:

 Blog::Application.routes.draw do resources :posts end 

rake路线给出了:

  posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy 

以下是rails s窗口生成的内容:

 Started POST "/posts/new" for 127.0.0.1 at 2013-10-05 21:17:52 -0400 ActionController::RoutingError (No route matches [POST] "/posts/new"): actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app' railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call' activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged' railties (3.2.13) lib/rails/rack/logger.rb:16:in `call' actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call' rack (1.4.5) lib/rack/methodoverride.rb:21:in `call' rack (1.4.5) lib/rack/runtime.rb:17:in `call' activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call' rack (1.4.5) lib/rack/lock.rb:15:in `call' actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call' railties (3.2.13) lib/rails/engine.rb:479:in `call' railties (3.2.13) lib/rails/application.rb:223:in `call' rack (1.4.5) lib/rack/content_length.rb:14:in `call' railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call' rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service' C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templat es/rescues/routing_error.erb within rescues/layout (1.0ms) 

我在其他教程中遇到了同样的错误,我试图遵循verbatum。 我错过了什么?

谢谢。

我相信您的问题可能出在以下方面:

 <%= form_for :post, url: posts_path do |f| %> 

将其更改为:

 <%= form_for @post do |f| %> 

我遇到了同样的问题。 /posts/new正在加载,但是当我提交表单时,我收到了路由错误。

通过在/views/posts文件夹中有一个名为_form.html.erb单独文件,您应该为newedit操作使用相同的表单。

然后,在new视图和edit视图中,您将引用此表单:

 <%= render "form" %> 

经过多次初步混淆后,这对我有用。

祝好运!

首先,您可以使用<%= form_for @post do |f| %> <%= form_for @post do |f| %>

其次,您的控制器需要引用@post 。 例如,在new ,它将是@post = Post.new

尝试在控制器操作中创建模型:

控制器:

 def new @post = Post.new end 

视图:

 <%= form_for @post do |f| %> 

还请发布生成的html。

我不确定修复它的原因。 @ titanboa – 该教程还没有涵盖生成模型,所以我继续在教程中继续,好像一切正​​常。 生成模型后,它现在似乎工作正常。 对不满意的结论感到抱歉,但感谢所有的投入!

您是否有可能使用Posts模型而不是Post模型 – 单数与复数? 请检查模型的文件名(post.rb与posts.rb)以及该文件中的类名(Post vs. Posts)。

看起来’posts_path’解析为’posts / new’而不是’posts’,因为从你的错误消息中我看到有一个POST’请求’posts / new’,而提交表单应该会导致POST请求’/post。

也许还有其他原因’posts_path’表现得像那样,但我的第一个猜测是单数/复数。

编辑:现在我已经尝试重现这个问题,但是既没有改变关于单数/复数的模型也没有完全删除模型导致了我的相应行为。

我遇到了同样的问题,直到后来我发现我需要刷新,而不是单击“返回”按钮进入post/新页面。 希望能帮助到你。

我有同样的问题,我在另一个线程中找到了我的问题的答案。

同一问题的其他线程。

我的问题是我在我的posts_controller文件中的私有函数下面有我的def show函数。 私有关键字以下的任何内容显然也是私有的。

我有同样的问题。 我在类似的post上尝试了所有的答案,没有任何效果,包括上面的那些。

我甚至删除了应用程序并重复了这个过程并陷入了同样的问题。

经过多次挫折之后,我意识到它与text_area字段有关。 在每种情况下,我都将网页中的随机文本复制到正在抛出错误的正文文本字段中。 我知道这是因为我决定改为输入随机文字而瞧! 它致力于提交。

一直没有错。 由于Ruby text_area属性没有限制 ,我想它必须与我正在复制的字符混淆背景中的代码,因为它将它不理解的内容转换为HTML,如此处所述。

这是我自己的特例,我认为我应该分享。