作成中のブログアプリで発生したエラーを解消した経緯です。画像をアップロードすると・・・ブログ記事と画像がデータベースに登録されてindex画面に移動するはずが、エラー表示。
Nil location provided. Can't build URI.
・・・というエラーメッセージが表示されます。早速原因究明です。
####エラーが出るまでにやったこと
・ImageMagickのインストール
・必要なgem(carrierwave と mini_magick)のインストール
・imageカラムの作成
・Uploaderファイルの作成と設定
・・・などの一連の作業をやっていましたが、特に問題点はなさそう。
####検証
①'Nil location provided. Can't build URI.'は、「locationが与えられていないからURIが作成できない」と言っているらしいが・・・いまいち意味が不明。
②Googleでこのメッセージを調べてみると、データの入っていないカラムがあるとこのメッセージが出てくるらしい。どうもこれが原因っぽい。
③rails consoleで 'Blog.all' でチェック。imageカラムを作成するより前にテストで投稿したブログ記事には画像を登録していない!
④imageカラムが空の記事を全て削除→症状変わらず
⑤新たに画像を登録したはずの記事について、再度コンソールで呼び出して確認。
タイトルと本文は登録できているが、画像が登録されていない。そのためエラーが発生している!ということのようです。
####コンソールのエラーメッセージ確認
登録自体はできているようなので、コンソールに出ている記述を確認してみました。そこに怪しい記述を発見。
image と image_cache が'Unpermitted parameters'と書かれていました。
permissionといえば・・・というのでcontrollerファイルを見直してみたところ、それらしき箇所がありました。strong parameterです。
def blog_params
params.require(:blog).permit(:title, :content)
end
ここにimage と image_cache がない→パラメーターが許可されていない!ということのようです。
def blog_params
params.require(:blog).permit(:title, :content, :image, :image_cache)
end
要素を追加して実行してみたところ、無事に画像のアップロードが成功しました。
エラーメッセージを丁寧に確認することがエラー解決への近道だということを身をもって経験したという話でした。