2013-05-11 55 views
0

我正在爲在軌中創建的博客添加註釋。沒有ID博客錯誤找不到帖子

我在試圖提交評論時不斷收到此錯誤「無法找到沒有ID的帖子」。

的Rails表明這一點:

{"utf8"=>"✓", 
"authenticity_token"=>"KOsfCNHJHo3FJMIBX6KNCV2qdyoYV6n5Rb3MNbhTX3M=", 
"comment"=>{"comment"=>"work dammit", 
"post_id"=>"post"}, 
"commit"=>"Post"} 

下面是評論控制器

類CommentsController < ApplicationController的

def create 
     @post = Post.find(params[:id]) 
     @comment = current_user.comments.build(params[:comment]) 
     if @comment.save 
      redirect_to root_path 
     else 
      flash.now[:error] = "Your comment did not save!" 
      render '/blog' 
     end 
    end 

def destroy 
    @comment = Comment.find(params[:id]) 
    @comment.destroy 
end 

end 

這是帖子控制器

def show 
    @post = Post.find(params[:id]) 
    @comment = Comment.new(post_id: :post) 

    end 

以下是評論的形式

<%= form_for @comment do |f| %> 

    <div class='comment'> 
    <%= f.text_area :comment, placeholder: "Leave a comment!", size: "40 x 3" %> 
    </div> 
    <%= f.hidden_field :post_id %> 
    <%= f.submit "Post", class: "button"%> 
    <% end %> 

我意識到我可能做同樣的事情兩次。我也愚蠢地稱評論評論的內容,並且當我將其改變爲內容時似乎得到更多錯誤。

我可能已經打破了很多東西。

回答

1

您沒有提交post_id作爲您的請求的一部分。你PARAMS是錯誤的:

{"utf8"=>"✓", 
"authenticity_token"=>"KOsfCNHJHo3FJMIBX6KNCV2qdyoYV6n5Rb3MNbhTX3M=", 
"comment"=>{"comment"=>"work dammit", 
"post_id"=>THIS SHOULD BE A POST ID}, 
"commit"=>"Post"} 

這是因爲你設置了註釋錯在你的控制器:

def show 
    @post = Post.find(params[:id]) 
    # This is incorrect 
    # @comment = Comment.new(post_id: :post) 

    # This is correct 
    # @comment = Comment.new(:post => @post) 

    # This is better 
    @comment = @post.comments.build 
end 

您還可以通過形式指定的帖子ID值修正這個問題,如果你喜歡做的,而不是建立在它的控制器:

<%= f.hidden_field :post_id, @post.id %> 

這將插入到POST_ID它的隱藏字段,所以實際發送正確的值。

然後在您的CommentsController中,您需要從該ID加載帖子。這將是:

@post = Post.find params[:comment][:post_id] 

在上面的情況。

但是,使用嵌套資源會更聰明,因此您可以從URL中免費獲得post_id。請參閱the Rails Guide

對於這些基本問題,我建議您對Rails框架中發生的事情有基本的瞭解。這將是值得您的時間去通過Rails for ZombiesRails Tutorial。挖掘並花時間真正瞭解REST意味着什麼以及應用程序如何通過響應請求加載頁面將是非常值得的。

+0

謝謝!我其實已經完成了殭屍和哈爾特的教程Rails。我想我對此有一個主要的想法,並且(正如它所顯示的那樣)拋出了很多代碼,希望能夠解決它。我知道的可能是錯誤的方式去做它哈哈。我會研究嵌套資源,這是我不太瞭解的。 – Michael 2013-05-12 00:42:52