LoginSignup
15
6

More than 3 years have passed since last update.

【Rails】destroyメソッドを使用しようとしたら"ArgumentError (wrong number of arguments (given 0, expected 1)):"

Posted at

はじめに

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引数が見つかりませんとエラーを吐いてしまっていたんですね:sweat_smile:

おわりに

最後まで読んで頂きありがとうございました:bow_tone1:

どなたかの参考になれば幸いです:relaxed:

参考にさせて頂いたサイト(いつもありがとうございます)

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6