はじめに
Railsのdestroy
メソッドを使用しようとしたら以下のように引数が1つ必要なのに見つかりませんとエラーが発生しました。
凡ミスですが、記録として残します。
ArgumentError (wrong number of arguments (given 0, expected 1)):
環境
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
結論:解決法
今回のコードは以下のようになっていました。
def destroy
posts = Post.where(user_id: 1)
posts.destroy #ここでエラー発生
end
↓
def destroy
post = Post.find_by(user_id: 1)
post.destroy #これは通る
end
このように、find_by
にすると通ります。
もしくは、該当データが複数ある場合は
def destroy
Post.destroy_by(user_id: 1) #これも通る
end
のようにdestroy_by
メソッドを使えば該当データをまとめて削除することが出来ます。
原因:destroy
は配列を処理できない
where
だと該当するデータが1件であっても配列で返すようになっています。
そのため、配列を処理できないdestroy
は引数が見つかりませんとエラーを吐いてしまっていたんですね
おわりに
最後まで読んで頂きありがとうございました
どなたかの参考になれば幸いです