2017-09-13 97 views
0

我对RoR是全新的,并且试图构建一个简单的博客,但已经陷入了“添加贴文”功能。Rails:Form_for:没有路由匹配{:action =>“show”,:controller =>“posts”}缺少必需的键:[:id]

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长相当我加载.../posts/new

以下错误消息弹出像这样:

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

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

我会很高兴任何意见,并为这个愚蠢的问题表示歉意。

+0

我编辑您的标题,然后取出亵渎。如果他们没有必要,请不要使用粗言秽语。 –

回答

0

检查与航线:

$rake routes 

,你会看到,随着一个ID的posts_path其用于更新“后”,而不是创建一个,您还可以找到你想要的路径创造一个新的“职位”。

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

更新: 删除

url: post_path 

从你的form_for通话

我的建议,检查了rails guides on routing

0

form_for帮助程序正在寻找资源对象来操作,并且您正在给它一个符号。我怀疑它是假设这是一个操作URL,并将该符号翻译(或试图)为路由。

new操作使用form_for,该模式通常是创建一个新的资源和哺养到form_for帮手:

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

@post对象不会有ID,所以表单仍然会抱怨,问题在于他使用的路径不是用于创建而是更新对象。 –

+0

@GuillermoSiliceoTrueba表单不关心资源ID,除非你创建它们,即使这样他们也会高兴地接受一个零。 – ArtOfCode

+0

但它不是form_for那些抱怨它的post_path,他们关心无 –

相关问题