前提・実現したいこと
ユーザー情報の編集、updateができません。
エラー画面がなくどこが原因なのか特定に困っています。
コントローラーのupdateメソッドの条件分岐で毎回render :editを実行されてしまいます。
updateがfalseになってしまう原因がわかりません。
デパック
rails
1[1] pry(#<UsersController>)> params 2=> <ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"+KhzMcu9HQyw0VSFqTg08kxC6QJnsde9zIUnk09qLJpYathar8vtKRNB2qi8Nkzht8A1kttCTa0z1yY44ailtQ==", "user"=>{"name"=>"aaa", "email"=>"aa@gmail.com", "profile"=>"aaa", "profile_image"=>#<ActionDispatch::Http::UploadedFile:0x00007fda9b84ee50 @tempfile=#<Tempfile:/var/folders/cl/n5bbc7j97mv9y9bp0vxqfftw0000gn/T/RackMultipart20210116-94328-16jgiuj.png>, @original_filename="botanical.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[profile_image]\"; filename=\"botanical.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"更新", "controller"=>"users", "action"=>"update", "id"=>"2"} permitted: false> 3[2] pry(#<UsersController>)> @user = User.find(params[:id]) 4 User Load (18.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1 5 ↳ (pry):5:in `update' 6=> #<User id: 2, email: "aaa@gmail.com", name: "aaa", profile_image_id: nil, profile: nil, created_at: "2021-01-15 12:44:56", updated_at: "2021-01-15 12:44:56"> 7[3] pry(#<UsersController>)> @user.valid? 8=> false 9[4] pry(#<UsersController>)> @user.errors 10=> #<ActiveModel::Errors:0x00007fda93897018 11 @base=#<User id: 2, email: "aaa@gmail.com", name: "aaa", profile_image_id: nil, profile: nil, created_at: "2021-01-15 12:44:56", updated_at: "2021-01-15 12:44:56">, 12 @details={:password=>[{:error=>:invalid, :value=>nil}]}, 13 @messages={:password=>["英字と数字の両方を含めて設定してください"]}> 14[5] pry(#<UsersController>)> exit 15
仮説、updateメソッドは、元となる何かがあることが前提で、現状profile.imageなどがNULLだから、updateできなんでしょうか?
該当のソースコード (Userコントローラー)
rails
1class UsersController < ApplicationController 2 before_action :authenticate_user!, except: [:index] 3 def index 4 @users = User.all 5 end 6 7 def show 8 @user = User.find(params[:id]) 9 end 10 11 def edit 12 @user = User.find(params[:id]) 13 end 14 15 def update 16 binding.pry 17 @user = User.find(params[:id]) 18 if @user.update(user_params) 19 redirect_to user_path(@user) 20 else 21 render :edit 22 end 23 end 24 25 private 26 def user_params 27 params.require(:user).permit(:name, :email, :profile, :profile_image) 28 end 29end 30
rails
1 <%= form_with model: @user, local: true do |f| %> 2 <div class="field"> 3 <%= f.label :name, "ユーザー名", class: "label" %> 4 <%= f.text_field :name, class: "input" %> 5 </div> 6 7 <div class="field"> 8 <%= f.label :email, "メールアドレス", class: "label" %> 9 <%= f.email_field :email, class: "input" %> 10 </div> 11 12 <div class="field"> 13 <%= f.label :profile, "プロフィール", class: "label" %> 14 <%= f.text_area :profile, class: "textarea" %> 15 </div> 16 17 <div class="field"> 18 <%= f.label :profile_image, "プロフィール画像", class: "label" %> 19 <%= f.attachment_field :profile_image, class: "input" %> 20 </div> 21 22 <%= f.submit "更新", class: "button is-success" %> 23 <% end %> 24 25
(Userモデル)
rails
1 2class User < ApplicationRecord 3 # Include default devise modules. Others available are: 4 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 5 devise :database_authenticatable, :registerable, 6 :recoverable, :rememberable, :validatable 7 8 PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze 9 validates_format_of :password, with: PASSWORD_REGEX, message: '英字と数字の両方を含めて設定してください', on: :create 10 11 validates :name, presence: true 12 13 has_many :posts 14 has_many :comments 15 attachment :profile_image 16end 17
試したこと、
###やりたいこと
テスト環境です。
サインイン画面では、email,name,passwordだけの登録し、その後ユーザー詳細から編集と画像の追加
ができるようにしたいと思っています。しかしながら、現状フォームを入力して更新ボタンを押しても、dbに保存されるどころか、falseで返され、editのページに戻されてしまします。
さまざまなサイトで、refile導入時のエラーなど、探してみましたが前例がなく、答えが導けず困っています。
初学者ながら、画像を投稿できるウェブアプリケーションを作りたいと思い作っています。
どうぞアドバイス宜しくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー