平々凡々エンジニア

平凡で難しい悩みを解決

飽きられめそうになった

新しく作成しているアプリにrails gem carrierwaveを使用して単数の画像投稿から複数の画像を投稿にするように改良したいが思うように事が進まない。問題としている部分は、画像ファイルパスを正しく呼びせないこと。

期待してる値: /uploads/product/avatars/image_1.jpg
返ってくる値: /uploads/product/avatars/1/%5B%22image_1.jpg%22%

  • 状況を確認する
    • データベースに拡張子を含む保存した画像ファイル名が正しく記録されている
    • 保存した画像ファイルのurlは期待している値と一致する

このことから呼び出し側に問題があるように思われる しかし特に思ったようなミスを見つけることができず

何かしらの副作用が働いてる事を予想してcarrierwaveだけを使用して複数の画像投稿と出力ができるかを試してみる(github carriawave_test)
結果、複数の画像投稿と出力ができることが確認できた。このことから自分の記載にミスがあることに確信をもつ。しかしながらどうしてもミスが見当たらず焦っていくのと同時に不安が積もっていくのがわかり、ぬかるみに足を踏み込んだ状態だったの悟ったので 一度距離を置くことにした。

時間をおいて改めて考え直すとそもそも調べが足りなかったのではなかったのでは無いかと思い、不要になっている文字列を検索したところヒットした
try adding serialize :photos to your product modelによるとモデルにシリアライズを付け加えていないと同じ症状がおきることがわかった

モデルのシリアライズを見直すと以下のタイプミスに気がつき修正したところ複数の画像投稿と複数の画像表示ができるようになる。
修正前serialize :pictures、JSON
修正後serialize :pictures, JSON

railsでの複数画像処理については多種多彩であるためなのかcarriawaveの日本語情報が少ないように感じたためこの症状解決方法をqiitaに投稿することにした。

rails Carrierwave urlメソッドで画像ファイル保存先を呼ぶときにURLに%5B%22などが含まれてしまう

解決に約四日費やしてしまったがおかげでcarriawaveの理解とデバックの作業の向上が見受けられた
しかし現場ではこんなに悠長に開発はしていられないため反省をする

よくある作業ミスを即座に発見対処できなかったことは、問題発見能力不足と言っても過言では無い。うまくいかないことを自分のせいではなくどこかgemのせいだったりrailsのバージョンのせいだったりと責任転換したくなった気持ちで問題解決を行っていたように思う。 そのため自分のタイプミスに気が付けなかったように思える。しかし幸いなことに今回はこの責任転換したい焦りを感知し、時間を置く事で焦りを解消でき冷静に判断できたと思う。readmeに書かれた通りにやって動かないのは99%自分が悪いと思って行おうと思う。

参考: carrierwave