在rails中找不到没有ID的帖子

时间:2013-06-01 16:29:43

标签: ruby-on-rails ruby-on-rails-3

show.html.erb

<%= form_for :comment, :url=> {:controller => 'comments', :action => 'create'} do |f| %>
<%= f.text_field :title %>
<%= f.text_area :comment %>
<%= f.hidden_field :id , :value => @post.id %>
<%= f.submit %>
<% end %>
在Comments_controller

class CommentsController < ApplicationController

def create
  @post = Post.find(params[:id])
  @comments = @post.comments.create(params[:comment])
  if @comments.save
    redirect_to @post
  else
    redirect_to post_path
  end
end

Routes.rb 中 资源:帖子

match '/create',  :to => 'comments#create'  , :as => :create 

当我从视图表单添加任何评论时,它会出现以下错误:

'Couldn't find Post without an ID'

我无法弄清楚为什么params [:id]没有返回Post ID? 注意:我使用的是acts_as_commentable

2 个答案:

答案 0 :(得分:4)

得到了答案

comments_controller 应为

class CommentsController < ApplicationController

  def create
    @post = Post.find(params[:comment][:id])    
    @comments = @post.comments.create(params[:comment])
    if @comments.save
      redirect_to @post
    else
      redirect_to post_path
    end
  end
end
  

@post = Post.find(params [:comment] [:id])

答案 1 :(得分:3)

你的params [:id]没有返回帖子ID的原因,因为在routes.rb中你选择了网址/create,其中你没有为id指定任何占位符。

如果您需要params[:id]之类的内容,那么您应该在routes.rb '/create/:id'中编写match