我是一个全新的RoR新手,正在尝试建立一个简单的博客,但已经被“添加帖子”功能卡住了。
加载.../posts/new时弹出以下错误消息
No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]下面是我的post控制器的样子:
class PostsController < ApplicationController
def index
end
def new
end
def create
render plain: params[:post].inspect
end结束
下面是我的new.html.erb的样子:
<h1>Add Post</h1>
<%= form_for :post, url: posts_path do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body %><br>
<%= f.text_area :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>我已经在我的路线中设置了帖子作为资源。令人惊讶的是,在我朋友的笔记本电脑上,代码可以正常工作。
我很乐意接受任何建议,并为这个愚蠢的问题道歉。
发布于 2017-09-14 06:23:50
使用以下工具检查您的路由:
$rake routes您将看到带有id的posts_path用于更新"post“,而不是创建一个"post”,您还将找到要创建新“post”的路径。
您可能会说:但我没有更新操作。如果在路由文件中使用了resources关键字,即使缺少操作本身也是如此。
更新:删除
url: post_path从您的form_for调用
我的建议是,看看rails guides on routing吧。
发布于 2017-09-14 06:30:29
form_for帮助器正在寻找要操作的资源对象,而您给了它一个符号。我怀疑它假设这是一个动作URL,并将该符号转换(或尝试)为路由。
在new操作中使用form_for,模式通常是创建一个新资源并将其提供给form_for帮助器:
def new
@post = Post.new
end<%= form_for @post, url: posts_path do |f| %>
...
<% end %>https://stackoverflow.com/questions/46207625
复制相似问题