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