我正在浏览rubyonrails.org的“博客教程”,当我尝试提交“帖子”时出现此错误:路由错误 - 没有路由匹配[POST]“/ posts / new”
我将教程中的代码复制并粘贴到我的代码中。这应该返回带有帖子的文本和标题的哈希值,但是我得到了上面的错误。
这是我的观点:
<%= form_for :post, url: posts_path do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
这是我的控制器:
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
正在加载,但是当我提交表单时,我收到了路由错误。
你应该有new
和edit
动作的相同形式,在_form.html.erb
文件夹中有一个名为/views/posts
的独立文件。
然后,在您的new
和edit
视图中,您可以参考此表单:
<%= render "form" %>
经过多次初步混淆后,这对我有用。
祝好运!
首先,你可以使用<%= 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请求'/帖子。
也许还有其他原因'posts_path'表现得像那样,但我的第一个猜测是单数/复数。
编辑:现在我已经尝试重现这个问题,但是既没有改变关于单数/复数的模型也没有完全删除模型导致了我的相应行为。
我有同样的问题,直到后来我发现我需要刷新,而不是单击返回按钮进入帖子/新页面。希望能帮助到你。
我有同样的问题,我在另一个线程中找到了我的问题的答案。
我的问题是我在我的posts_controller文件中的私有函数下面有我的def show函数。私有关键字以下的任何内容显然也是私有的。
我有同样的问题。我尝试了类似帖子的所有答案,但没有任何效果,包括上面的那些。
我甚至删除了应用程序并重复了这个过程并陷入了同样的问题。
经过多次挫折之后,我意识到它与text_area字段有关。在每种情况下,我都将网页中的随机文本复制到正在抛出错误的正文文本字段中。我知道这是因为我决定改为输入随机文字而瞧!它致力于提交。
一直没有错。自从Ruby text_area attribute has no limit以来,我想它必须与我正在复制的字符混淆背景中的代码,因为它将它不理解的内容转换为HTML,如此处所述。
这是我自己的特例,我认为我应该分享。