2017-09-13 93 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,他們關心無 –

相關問題