r66  2021/05/13更新

デフォルトのアイコン画像の設定


やりたいこと

下記のようなfile_fieldなどで、画像を選択してプロフ画像を設定する際に、未選択の場合はデフォルトで設定した画像を表示

erb

      <%= f.label :image %>

手順1

Gemfileにcarrierwaveを追加

      gem 'carrierwave', '~> 2.0'
      bundle install

手順2

uploaderファイルを作成

      $ rails g uploader image
      *imageは設定する画像につけたい名前(ex:img,incon)

上記のコマンドを叩くと、下記のファイルが作成される

create app/uploaders/image_uploader.rb

手順3

手順2で作成したuploaderファイルを該当のモデルに関連づける

model

      mount_uploader :image, ImageUploader

手順4

デフォルトで設定した画像をassets/imagesに入れる

手順5

image_uploader.rbを修正する

      #アップロードした画像の表示
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

#デフォルト画像の設定
  # Provide a default URL as a default if there hasn't been a file uploaded:
  def default_url(*args)
  #   For Rails 3.1+ asset pipeline compatibility:
  #   ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  picture-123.png ⇦(デフォルトで指定したい画像のパス)
  #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  end

手順6

表示ページのviewにで条件分岐

show.html.erb

    <% if @user.image? %>
    画像を選択した際の内容を記載
  <% else %>      
    <%= image_tag src='picture-123.png', class: "user-icon", alt: "ユーザーアイコン" %>
  <% end %>   

参考

https://qiita.com/nekotanku/items/5da43600f35eada64eac

タイトルとURLをコピーしました