管理画面上から画像をアップロードすると同時に画像の縦・横サイズもデータベースに入れてみました。
before_saveを使ってtmp以下に保存されたと同時にfastimageを使用して画像サイズを取得しています。
例外処理が入っているのは管理画面からEditを押して画像以外の部分の編集をした場合に画像データが取得できずにエラーを出すので、その時は元の値をそのまま使用するようにしています。
Gemfile
画像サイズを取得するためfastimageを追加します。
gem 'fastimage'
モデルのbefore_save時に画像サイズを取得してカラムにセットします。
class Goods < ActiveRecord::Base
before_save :write_width_height
mount_uploader :image, ImageUploader
def write_width_height
begin
width, height = FastImage.size self.image.file.file
self.width = width
self.height = height
rescue
# 編集時、画像がアップロードされていない時は画像サイズを触らない
end
end
end