前提・実現したいこと
Railsでユーザーがプロフィールを変更する機能を実装したいのですが、editアクション内で入力したデータをupdateアクション内で上書きしようとすると、失敗してしまいます。
該当のソースコード
edit.html.erb
<%= form_with scope: :mydata, url: mypage_edit_path , local: true do |f| %> <div class = "form-group"> <label>ユーザーネーム</label> <%= f.text_field :name, class: "form-control", value: @current_user.name %> </div> <div class = "form-group"> <label>ユーザーID</label> <%= f.text_field :user_id, class: "form-control", :placeholder => "半角英数字4文字以上で入力", value: @current_user.user_id %> </div> <div class="text-center"> <%= f.submit "変更", class: "btn btn-primary" %> </div> <% end %>
users_controller.rb
def edit end def update @user = User.find_by(id: session[:user_id]) if @user.update(mydata_params) redirect_to action: :show, id:@user.id, notice: '変更しました' else flash[:alert] ='変更に失敗しました' render action: :edit end end private def mydata_params params.require(:mydata).permit(:name, :user_id) end
このコードを実行すると、if文がelseの方に入り、「変更に失敗しました」と表示されてしまいます。
試したこと
users_controller.rbの、「@user=~」と「if~」の間にbyebugと書き、その位置での各変数の中身を確認してみました。
結果、@user、mydata_paramsともに、正しいデータが入っていました。
「ユーザーネーム」と「ユーザーID」のどちらとも変更した場合、どちらか片方のみ変更した場合、どちらも変更しなかった場合、どれも「変更に失敗しました」と表示されます。
どうしてこのような動きになるのか、原因がまったく分かりません。教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/29 23:48