0
0

More than 3 years have passed since last update.

画像ファイルについてしまった[ ]を取り除く

Posted at

はじめに

画像ファイルを複数登録するときに、multipleを使うと簡単に実装できます。
が、(自分の環境だけなのか)保存されるデータに含まれる画像ファイル名に
[ ]がついてしまい、実際に保存されている画像ファイル名を齟齬が生じ
エラーとなる自体が発生していました。
そこで、Model側にこれを取り除くメソッドを追加しましたが、同じような環境で
困っている方はご利用ください
最近、某プログラミングスクールではこれの影響なのかmultipleを使わないようにと
御達しが出たようですね。

前提条件

ItemモデルはImagesを複数持つアソシエーションが組まれていること

コード

app/models/image.rb
class Image < ApplicationRecord
  belongs_to :item, optional: true
  validates_presence_of :item
  mount_uploaders :image_url, ImageUploader

  def image_path
    return '' if self.image_url[0].try(:file).nil?
    if Rails.env.production?
      self.image_url[0].url.gsub(/%5B%22/, "").gsub(/%22%5D/, "")
    else
      self.image_url[0].file.file.sub(/.*public/,'').sub(/\["/,'').sub(/"\]/,'')
    end 
  end
end

今回はS3に画像を保存するようにしており、本番環境とローカルでは指定する画像パスが異なってくるので
production?を使って分岐させています。

使い方

app/controllers/items_controller.rb
 def show
    @item = Item.find_by(id: params[:id])
    @image_path = @item.images.map{|img| img.image_path}
 end

paramsで渡されたidのアイテムを@itemに格納し、@itemのimagesに対して
modelで作成したimage_pathメソッドを実行して[ ]を削除したパスを@image_path
格納して使えるようにします。
あとはビュー側でimage_tagに@image_path[n]とすれば格納したパスを
取り出すことができます。@image_pathは配列になっていることに注意です。

おわりに

細かいことですが、私は最初Controllerに[ ]を取り除く処理を書いていましたが、メンバーが
MVCモデルの法則に則ってModelにメソッドを書き直してくれました。
開発の基準をしっかりと把握していないと他のメンバーに迷惑をかけてしまいますね・・・猛省

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0