carrierwaveを使った画像投稿の際の知識振り返り(Rails 総復習1ヶ月チャレンジ 16日目)

チャレンジ16日目です!今回はRUNTEQのカリキュラムをこなす中で画像投稿を久しぶりに復習して忘れていた点を備忘録的にまとめます。
carriewaveの実装方法は公式サイトを参照お願いします。

画像を登録後、投稿一覧画面に登録した画像が表示されない

accept属性 を設定しておらずそれが原因

accept 属性は、サーバが受け取ることが可能なファイルの種別を指定できます。
例えばaccept=".jpg"のように使ったり、形式は問わず、画像だけを受け入れたい場合は、accept="image/*" などとすることも可能。

<%= f.file_field :image, accept: 'image/*' %>

参考:
file_field | Railsドキュメント

accept 属性(受け取るファイル種別を指定する) | HTML5 タグリファレンス | W3 Watch Reference

画像登録がない場合のデフォルト画像の設定をhtmlに直書きしない

デフォルトの画像設定はuploder側でする

#NG
<% if @board.image.present? %>
  <%= image_tag @board.image.url,  size: '300x200' %>
<% else %>
  <%= image_tag 'sample.jpg', size: '300x200' %>
<% end %>
#OK
#uploaders/image_uploder.rb

def default_url
  'sample.jpg'
end

#view側
<%= image_tag @board.image.url, size: '300x200' %>

アップロードに失敗した際もファイルが消えないようにする

carrierwave公式ドキュメントに次のように解説されています。

Often you'll notice that uploaded files disappear when a validation fails. CarrierWave has a feature that makes it easy to remember the uploaded file even in that case. Suppose your user model has an uploader mounted on avatar file, just add a hidden field called avatar_cache

アップロードに失敗し、ファイルが消えてしまうことを防ぐため、アップロードされたファイルを簡単に覚えておくことができる機能が備わっているとのこと。

[設定したファイル名]_cache

上記のようにすることでその機能を使うことができます。

実際の使い方の例はこのような形

<%= f.hidden_field :image_cache %>  

今回は以上です!