如何删除嵌套记录

时间:2012-07-08 06:48:10

标签: ruby-on-rails ruby-on-rails-3 view controller parameter-passing

我的女模特有使用gem'meject_as_commentable'

的评论

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

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

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

它使用以下代码保留未定义的局部变量或方法`girls'错误。

“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

1 个答案:

答案 0 :(得分: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 %>

评论控制器中的destroy方法:

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

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