未体験未感覚エンジニアの日記

ITエンジニアになるまでのITダイビング日記

Userモデルに画像の登録可能のプロフィールモデルを作成する。

今日はrailsのgem deviseで作成したuserモデルにprofile画像を追加する方法を振り返ります。

ユーザー登録した後にあとで自分の画像や背景画像、自己紹介コメントを追加するような形で考えています。

まずrails g model Profileでprofilesモデルの作成

create_profiles.rbファイルに

t.string :image
t.string :backimage
t.string :comment
t.references :user, foreign_key: true

userモデルとprofileモデルは今回は1対1の関係なので、user.rbに

has_one :profile, dependent: :destroy

profileモデル、profile.rbに

has_one :user

と記載する。

ここで一度、rails db:migrateをしておく。

次に画像upload用にgemファイルに

gem 'carrierwave'
gem 'mini_magick'

の記載を追加。

ターミナルでimagemagickのinstallがまだであれば

brew install imagemagick

bundle install、

rails g uploader image

rails g uploader backimage

upload用のファイルを作成をします。

次にprofile.rbに

mount_uploader :image, ImageUploader
mount_uploader :backimage, BackimageUploader

の記載、それぞれのuploader.rb内にコメントアウトされている

include CarrierWave::MiniMagick
process resize_to_fit: [400, 400]

の部分を有効にして保存する画像ファイルのサイズを指定してください。

(今回はヨコ、タテとも400pxで保存するようにしました。

この時、uploader.rb内にコメントアウトした形で

def default_url(*args)
# # For Rails 3.1+ asset pipeline compatibility:
# # ActionController::Base.helpers.asset_path("fallback/"
"default.png"

となっている部分があるのでここを有効にし、画像を指定しておくと画像ない時に表示されるようになるのでおすすめです。

最後にrails db:migratesしておきましょう。

当初、gem deviseで作成したuserモデルにカラムを追加する形で進めていましたが、

プロフィール欄で同じタイミングで新規登録しないような状況だと

コントローラー内のデータの受け渡しで相性の悪さを感じたため別モデルでの作成に切り替えました。

上記の方法に切り替えた後はスムーズに作成出来たので同じタイミングで作成しない情報は別テーブルに保存した方がいいように思いました。

以上、お読みいただきありがとうございました。