0

我的女孩模特对使用 gem 'acts_as_commentable' 有评论

当我访问 example.com/girls/show/1
它显示 ID#1 女孩的个人资料。所有发布的评论都显示在此页面的底部。

对于每个评论行,我想添加删除按钮来删除评论。

如果它应该将参数传递给girls_controller.rb 的comment_destroy 动作。动作部分和视图应该如何?

它使用以下代码保留未定义的局部变量或方法“女孩” 错误。

“girls/show.html.erb” 视图应该是这样的。只是一部分。

<table>
  <tr>
    <th>ID</th>
    <th>Title</th>
    <th>Body</th>
    <th>Subject</th>
    <th>Delete</th>
  </tr>

<% @all_comments.each do |comment| %>
  <tr>
    <td><%= comment.id %></td>
    <td><%= comment.title %></td>
    <td><%= comment.body %></td>
    <td><%= comment.subject %></td>
    <td><%= button_to 'comment_destroy', girls, confirm: 'Are you sure?', :disable_with => 'deleting...', method: :delete %></td>
   </tr>
<% end %>
</table>

Girls_controller.rb 的 comment_destroy 动作应该是这样的

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

    respond_to do |format|
      format.html { redirect_to girls_url }
      format.json { head :ok }
    end
    redirect_to :controller => 'girls', :action => 'show', :id => params[:girls][:id]
    flash[:notice] = "comment deleted!"
  end
4

1 回答 1

2

您似乎有评论嵌套在某个女孩的下方,并且您想删除该评论。

路线

resources :girls do
  resources :comments, only: [:create, :destroy]
end

然后,您有一个评论控制器来处理您的创建和销毁。

<%= button_to 'comment_destroy', [@girl, comment], confirm: 'Are you sure?', :disable_with => 'deleting...', method: :delete %>

您的评论控制器中的销毁方法:

def destroy
  @girl = Girl.find(params[:girl_id])
  @comment = @girl.comments.find(params[:id])
  if @comment.destroy
    redirect_to @girl, notice: "Comment Removed"
  else
    redirect_to @girl, error: "We could not remove the comment"
  end
end

结尾

更新——基于用户使用非宁静解决方案的请求

路线:

resources :girls do
  member do
    delete :delete_comment, to: "girls#delete_comment", as: "delete_comment"
  end
end

控制器

def delete_comment
  @girl = Girl.find(params[:id])
  @comment = @girl.comments.find(params[:comment_id])
  if @comment.destroy
    redirect_to @girl, notice: "Comment Removed"
  else
    redirect_to @girl, error: "We could not remove the comment"
  end
end

查看链接

<%= button_to 'comment_destroy', delete_comment_path(@girl, comment_id: comment.id), confirm: 'Are you sure?', :disable_with => 'deleting...', method: :delete %>

最后一点:我真的不喜欢这个解决方案。您应该有一个 Comments 控制器并使用我的第一个解决方案。

于 2012-07-08T13:15:29.700 回答