Carrierwaveを用いて、ユーザープロフィール画像を設定するコードを書いており、form_forで画像を送信してもデータベースに反映されない問題に悩んでいます。
class UsersController < ApplicationController def show end def edit end def update if @user.update(user_params) redirect_to @user else flash.now[:alert] = "Something went wrong!" render :edit end end private def set_user @user = User.find(params[:id]) end def user_params params.require(:user).permit(:username, :avatar) end end
class User < ApplicationRecord has_many :posts, dependent: :destroy validates :username, presence: true mount_uploader :avatar, AvatarUploader end
<h1>Edit Profile</h1> <%= form_for @user, html: { multipart: true } do |f| %> <%= f.label :username %> <%= f.text_field :username %> <%= f.file_field :avatar %> <%= f.submit "Save Change" %> <% end %>
Rails.application.routes.draw do root 'homes#show' resources :users, only: [:show, :edit, :update] resources :posts do resources :comments, only: [:create, :edit, :destroy, :update] end end
試したこと・確認したこと
submitボタンを押した後、データベースのavatarカラムに何も保存されていないことから、form_forのコード部分に誤りがある、あるいはvalidationに引っかかっていると考えました。
updateアクション部分のif文前に
if @user.avatar?
と入力したところ、ビューではfalseとなったため、validation前の問題ではないかと考えています。
そこで、form_for部分に問題があるか調べましたが、特に問題はなさそうです。
userモデルにはavatarカラムがあり、carrierWaveもインストールされております。
解決策、あるいはミスしていそうな部分について、思い当たるものがある方は是非ともご助言いただきたくお願いします。
あなたの回答
tips
プレビュー