はじめに
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は引数が見つかりませんとエラーを吐いてしまっていたんですね![]()
おわりに
最後まで読んで頂きありがとうございました![]()
どなたかの参考になれば幸いです![]()