0

我的女孩模型使用的宝石“acts_as_commentable的评论如何删除嵌套记录

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

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

如果它应该通过参数girls_controller.rb的comment_destroy行动。 动作部分和视图应该如何?

它保持未定义的局部变量或方法`女孩'错误代码如下。

“女孩/ 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 
+0

您应该将路由添加到您的问题。但似乎你需要阅读和研究如何处理CRUD。看看官方指南,railscasts或代码学习网站上的Rails for zombies课程 – 2012-07-08 08:10:57

+0

使用AJAX或查看'_destroy'“参数”。 – Zabba 2012-07-08 08:47:50

+0

谢谢!我应该添加什么来查看部分来传递参数? – MKK 2012-07-08 10:16:56

回答

2

它看起来你有以下的女童嵌套评论,你要删除的评论。

路线

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

然后,你有意见控制器处理您创建和销毁。根据用户的要求使用非宁静的解决方案

路线 -

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 

UPDATE:

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

将在您的意见控制器销毁方法

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 %> 

最后说明一点:我真的不喜欢这种解决方案。你应该有一个评论控制器,并与我的第一个解决方案。

+0

感谢您的建议:)但如果你想删除女孩的纪录?似乎你正在取代女孩模特的毁灭行动。 – MKK 2012-07-08 15:16:22

+0

你是不是把这个方法放在comments_controller.rb?我没有一个。我应该做一个而不是写在girls_controller.rb?或者你还可以写在girls_controller? – MKK 2012-07-08 15:39:19

+0

@MKK那么你想删除一个女孩的记录?在子记录上看到父记录的删除不是很常见。 – 2012-07-08 17:57:50