0

私の女の子のモデルには、gem'acts_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
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 %>

コメントコントローラの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 %>

最後の注意:私はこの解決策が本当に好きではありません。コメントコントローラーが必要で、私の最初のソリューションを使用する必要があります。

于 2012-07-08T13:15:29.700 に答える