質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

3795閲覧

複数のデータをチェックボックスにて一括削除したい。

shuzi

総合スコア197

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/01/24 04:30

前提・実現したいこと

右端にあるチェックボックスでチェックをつけたデータを一括削除したい。
イメージ説明

発生している問題・エラーメッセージ

イメージ説明

配列に格納してコントローラーにまで渡せているのですが、そこから処理ができない。niLlClassになる。

該当のソースコード

view

1<tbody> 2 <%= form_tag({ controller: :goods, action: :destroy_all },method: 'delete') do %> 3 <% @goods.each do |good| %> 4 <tr> 5 <td text-align:center;><img height="80" src="<%=h good.image_url %>"/></td> 6 <td><%= good.goods_id %></td> 7 <td><%= good.title %></td> 8 <td><%= good.description %></td> 9 <td><%= good.image_url %></td> 10 <td><%= (good.price).to_i %>円</td> 11 <td><%=h ((good.date).to_date).strftime('%Y年%m月%d日') %></td> 12 <td><%= good.maker %></td> 13 <td><%= good.category %></td> 14 <td><%= link_to '詳細', good, class: 'btn' %></td> 15 <td><%= link_to '編集', edit_good_path(good), class: 'btn' %></td> 16 <td><%= link_to '削除', good, method: :delete, data: { confirm: '本当に削除してもよろしいですか?' }, class: 'btn' %></td> 17 <td><%= check_box_tag 'goods[]',good.id %> </td> 18 </tr> 19 <% end %> 20<div class="actions"> 21 <%= submit_tag "一括削除" %> 22 </div> 23 <% end %> 24 </tbody> 25</table>

...

contoller

1def destroy_all 2 @goods.destroy 3 respond_to do |format| 4 format.html { redirect_to goods_url, notice: '商品を削除しました。' } 5 format.json { head :no_content } 6 end 7 end

routes

1 controller :sessions do 2 3 get 'login' => :new 4 post 'login' => :create 5 delete 'logout' => :destroy 6 7 end 8 9 resources :users 10 resources :orders 11 resources :line_items 12 resources :carts 13 delete :goods, to: 'goods#destroy_all' 14 get 'market/show' 15 16 resources :goods 17 root :to => 'market#index', as: 'market'

...

試したこと

様々なHPを見ながら試したのですが、えらーが解消できず。
params[:goods]を使うとはおもっているのですが、そこの記述がどーしても出来ませんでした。

補足情報(FW/ツールのバージョンなど)

ruby 2.4.3
rails 4.2.10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@goodsがnilと言われているため、値を入れてあげましょう
id自体はコントローラーに渡せているため、
@goods = Good.where(id: params[:goods])
のような形にし(正確なモデル名がわからなかったため、仮にGoodにさせていただきました)、

@goods.each(:destroy)

もしくは

@goods.destroy_all

で選択されたgoodsが削除出来るかと思われます。

投稿2019/01/24 08:50

haneru

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shuzi

2019/01/24 12:05

コメントありがとうございます!! いただいたコメントを元に両方試してみましたが、だめでした。 処理は出来ていると思うのですが、モデルのバリデーションになぜかひっかかってしまいます。 追加で情報を入れてみます。
shuzi

2019/01/25 02:05 編集

再度、朝起きてリフレッシュした気持ちで再度、同じ記載をしてみたところ、 def destroy_all @goods = Good.where(id: params[:goods]) @goods.destroy_all respond_to do |format| format.html { redirect_to goods_url, notice: '商品を削除しました。' } format.json { head :no_content } end end で、無事成功しました!ありがとうございました。 昨日の夜と何が違うのか、まったく分からないのですが、、笑 ちなみに、@goods.each(:destroy)だと wrong number of arguments (given 1, expected 0) と出て、 出来なくて、 @goods.destroy_allだと成功します。 これって両者にどのような処理の差があるのでしょうか? ご教授いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問