Rails:Form_for:没有路由匹配{:action =>“show”,:controller =>“posts”}缺少必需的键:[:id]

时间:2017-09-13 22:16:51

标签: html ruby-on-rails ruby-on-rails-5

我是RoR的新手并且正在尝试构建一个简单的博客,但已经陷入了“添加帖子”功能。

加载.../posts/new时会弹出以下错误消息:

No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]

这是我的帖子控制器的样子:

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 %>

我已将帖子设置为路线中的资源。令人惊讶的是,在我朋友的笔记本电脑上,代码可以工作。

我会对任何建议感到高兴,并为这个愚蠢的问题道歉。

2 个答案:

答案 0 :(得分:0)

检查您的路线:

$rake routes

你会看到带有id的posts_path用于更新“帖子”而不是创建一个,你也会找到你想要创建一个新“帖子”的路径。

您可能会说:但我没有更新操作。如果在您的路径文件中使用了您使用的资源关键字,即使操作本身丢失了。

更新:

删除
url: post_path

来自您的form_for电话

我的建议,请查看rails guides on routing

答案 1 :(得分:0)

form_for帮助器正在寻找要操作的资源对象,并且您给它一个符号。我怀疑它假定这是一个动作URL,并将该符号转换(或尝试)到路线中。

form_for操作中使用new,模式通常是创建新资源并将其提供给form_for帮助程序:

def new
  @post = Post.new
end
<%= form_for @post, url: posts_path do |f| %>
  ...
<% end %>