🍓

ArgumentErrorでさまよった

2023/07/05に公開

🍍今回表示されたエラー文

🍍エラー文の意味は分かるけどそれで?って話

wrong number of arguments (given 1, expected 0)
→つまり、0こ来る予定なのに1こ来ちゃってるよ! 引数の数があってないよ!
ってことが言いたいんだと思った。

そして下段の赤くなっている部分 def get_profile_image 
ここでエラー発生しちゃってるんだ。ってことだよね。

けどこれを理解したとて、私にはスペルミスを見ることしか解決策が湧かなかった。
だって、検索機能入れるまでは全部ちゃんと動いてたんだもん、、、、。

🍍解決方法

とりあえずエラーになってるコードを見てみよう。

models/User.rb
def get_profile_image
    (profile_image.attached?)? profile_image: 'no_image.jpg'
end

それとview側のコードも見てみよう。

books/_index.html.erb
(略)
<td>
   <%= link_to user_path(book_comment.user) do %>
   <%= image_tag book_comment.user.get_profile_image('50x50') %><br>
     <%= book_comment.user.name %>
   <% end %>
</td>
()

view側ではget_profile_imageのあとに('50x50')と引数を渡してきてるけどmodel側ではget_profile_imageのみで引数を指定していないのが原因でした、、、。
だから、今回はviwe側のコードを書き換えます。

books/_index.html.erb
(略)
<td>
   <%= link_to user_path(book_comment.user) do %>
     <%= image_tag book_comment.user.get_profile_image size: '50×50' %><br>
     <%= book_comment.user.name %>
   <% end %>
</td>
()

size: '50×50'で画像サイズを指定することで()ではないので引数を渡していることにならないため、エラー表示が解消されました!!

🍍まとめ

今回の敗因はちゃんと引数について理解できていなかったことが原因。

🍍ちなみに

今回はviewの記述を変更したけどmodelに引数を設定してあげればいいんじゃない?って思った。

models/User.rb
def get_profile_image(*size)
    (profile_image.attached?)? profile_image: 'no_image.jpg'
end

これ記入するだけでできるんだ!って思ってbookの一覧ページ更新して確認したら

いや、でかない??????毛並みまで見えるレベルなんですけど
viweファイルの方で画像のサイズ変更をおこなっても一向にこのサイズはなおらなかったので、この書き方はやめて別の書き方で解決させました。

なんでかわかったらまた、追記したいと思います。

🍍最後にエラー発生の経緯

検索機能を追加しようとしていたら、このエラーが発生しついでにBookの_indexをrenderして使っているすべてのページにエラー表示されるようになった
いずれも表示されるエラー文は同じである。

どこかのタイミングで、Bookの_indexの画像サイズの記述を変更してしまったのが原因と考えられる。
そのため、Userの一覧ページなどは通常通り表示されていた。

Discussion