前提・実現したいこと
これまでform_tagで書いていたユーザーのプロフィールページをform_withに書き換えていたところ、値が保存されなくなりました。赤字のエラーメッセージは表示されませんが、空欄のままの保存を防ぐために個人的に設定していたエラーメッセージ(Name can't be blank、Email can't be blank等)が表示されます。フォームにきちんと入力してもこの文言が出てしまうのですが、なぜコントローラーが項目を受け取ってくれなくなったのかが分かりません。
該当のソースコード(users/edit.html.erb)
rails
1 <div class="form-body"> 2 <% @user.errors.full_messages.each do |message| %> 3 <div class="form-error"> 4 <%= message %> 5 </div> 6 <% end %> 7 <%= form_with(model: User, local: true) do |f| %> 8 <p> 9 <%= f.label :ユーザー名 %> 10 <%= f.text_field :name, value: @user.name %> 11 </p> 12 <p> 13 <%= f.label :画像 %> 14 <%= f.file_field :image, value: @user.image_name %> 15 </p> 16 <p> 17 <%= f.label :カバー画像 %> 18 <%= f.file_field :cover_image %> 19 </p> 20 <p> 21 <%= f.label :メールアドレス %> 22 <%= f.email_field :email, value: @user.email %> 23 </p> 24 <p> 25 <%= f.label :性別 %> 26 <%= f.radio_button :sex, :Male %>男 27 <%= f.radio_button :sex, :Female %>女 28 </p> 29 <p> 30 <%= f.label :国籍 %> 31 <%= f.country_select :country, selected: @user.country %> 32 </p> 33 <p> 34 <%= f.label :言語 %> 35 <%= f.select(:language, options_for_select(languages)) %> 36 </p> 37 <p> 38 <%= f.label :自己紹介 %> 39 <%= f.text_area :introduction, rows: "10", cols: "100", value: @user.introduction %> 40 </p> 41 <%= f.submit "保存" %> 42 <% end %> 43 </div>
該当のソースコード(users_controller.rb)
Ruby
1class UsersController < ApplicationController 2 before_action :authenticate_user, {only: [:index, :show, :edit, :update]} 3 before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]} 4 before_action :ensure_correct_user, {only: [:edit, :update]} 5 6def edit 7 @user = User.find_by(id: params[:id]) 8 end 9 10 def user_params 11 params.require(:user).permit(:name, :description, languages_attributes: [:id, :description, :done, :_destroy]) 12 end 13 14 def update 15 @user = User.find_by(id: params[:id]) 16 @user.name = params[:name] 17 @user.email = params[:email] 18 @user.sex = params[:sex] 19 @user.country = params[:country] 20 @user.language = params[:language] 21 @user.introduction = params[:introduction] 22 if params[:image] 23 @user.image_name = "#{@user.id}.jpg" 24 image = params[:image] 25 File.binwrite("public/user_images/#{@user.image_name}", image.read) 26 end 27 if params[:cover_image] 28 @user.cover_image_name = "#{@user.id}_cover.jpg" 29 cover_image = params[:cover_image] 30 File.binwrite("public/user_cover_images/#{@user.cover_image_name}", cover_image.read) 31 end 32 if @user.save 33 flash[:notice] = "ユーザー情報を編集しました" 34 redirect_to("/users/#{@user.id}") 35 else 36 render("users/edit") 37 end 38 end
試したこと
form_with関連のページを参照し、フォームの実装までは上手く漕ぎつけたのですが、保存の部分で行き詰まってしまいました①, ②, ③。
「form_with コントローラー」や「form_with 保存」等で情報を得ようとしたのですが、原因が見つかりませんでしたので質問させて頂きました。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/18 13:57