2012-03-17 14 views
0

Railscast episode 198を使用して、チェックボックスを使用して複数のオブジェクトを個別に編集できるフォームを作成しました。私は変更したい項目のボックスをチェックした後、 "編集"または "削除"アクションを選択できるようにしたいと思います。私は編集アクションのための私のphotos_controller.rbにこれを追加しました:複数のオブジェクトを同じレール形式で削除または編集する

def edit_individual 
    @photos = Photo.find(params[:photo_ids]) 
end 

    def update_individual 
    @user = current_user 
    @photos = Photo.update(params[:photos].keys, params[:photos].values).reject { |p| p.errors.empty? } 
    if @photos.empty? 
    flash[:notice] = "Products updated" 
    redirect_to photos_url 
    else 
    render :action => "edit_individual" 
    end 
end 

そして、私の見解では、私はそれを表示するためにそれぞれの写真を通じて、このコード行Iループを追加しています:

<%= form_tag edit_individual_photos_path, :method => "get" do %> 
    ... #loop through all photos and add a checkbox 
    <%= check_box_tag "photo_ids[]", photo.id %> 
<%= submit_tag "Edit", :class => "btn btn-large btn-inverse" %> 

これは問題なく動作しますが、フォームに別の送信タグを追加して、選択したアイテムを編集するのではなく、削除する方法がわかりません。誰も私がパラメータとしてphoto_idsの配列を渡してそれらを破壊する方法を知っていますか?

答えて

0

Ashitakaさんの助けを借りて、私はコントローラーの削除アクションにこれを思いついた。編集/更新はデフォルトのアクションだったので、クリックされたボタンが「削除」であった場合にのみ特定の操作を行う必要がありました。 photos_controller.rbで

:ビューで

def edit_individual 
    ... 
    if params[:commit] == 'Delete' 
    @photos = Photo.find(params[:photo_ids]) 
    @photos.each { |photo| 
     photo.remove_image! 
     Photo.destroy(photo.id) } 
    redirect_to photos_new_path 
    end 
end 

<%= form_tag edit_individual_photos_path do %> 
    ...#loop through all of the photos and add checkbox 
    <%= check_box_tag "photo_ids[]", photo.id %> 
    #two submit buttons for the different actions 
    <%= submit_tag "Edit", :class => "btn btn-large btn-inverse" %> 
    <%= submit_tag "Delete", :class => "btn btn-large btn-danger" %> 
<% end %> 
1

重複した質問How do I create multiple submit buttons for the same form in Rails?

唯一の違いは、その質問に、彼らはform_tagsubmit_tag Sの代わりにform_forf.submit Sを使用しているが、理解しやすいべきであるということです。あなたのボタンの値は、 "A"と "B"ではなく "Edit"と "Delete"になります。

+0

ボタンがクリックされた区別するためにどのように私に語った - 感謝を。私はまだdestroy_actionにphoto_idsの配列を渡して、それらのすべてを削除することはできません。私はこれがリクエストかどうか、別の理由があるかどうかを特定しているかどうか分かりません。 – kcurtin

+0

このようにすると、あなたのIDはすべてparams [:photo_ids]の中に入り、編集アクション。編集アクションでは 'if params [:commit] == 'Delete''と内部ですべてのIDを繰り返し処理し、見つかったオブジェクトを破棄しなければなりません。 – Ashitaka

+0

クール - ありがとうございます。私はそれを理解することができました。私が使い終わったコードで回答を追加しよう – kcurtin