在 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
答案 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
。