0

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 资源中:posts

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

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

'Couldn't find Post without an ID'

我不知道为什么 params[:id] 不返回 Post ID ?注意:我正在使用acts_as_commentable

4

2 回答 2

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])

于 2013-06-01T16:39:42.223 回答
3

您的 params[:id] 没有返回 Post ID 的原因是您routes.rb选择了 url /create,其中您没有为id.

如果你想要这样params[:id]的东西,routes.rb你应该用'/create/:id'mathodmatch写。

于 2013-06-02T06:15:11.397 回答