2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ユーザープロフィールupdate時に起きたエラー

Posted at

プロフィールページでニックネーム、自己紹介文の編集機能をつける

スクリーンショット 2019-07-12 19.00.18.png
routes.rb

  resources :users, only: [:show, :new, :edit, :create, :destroy, :update]
users_contoroller
  def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      flash[:notice] = "変更しました。"
      redirect_to "/users/#{@user.id}/edit"
    else 
      flash[:alert] = "失敗しました"
      redirect_to "/users/#{@user.id}/edit"
    end
  end

  private
  def user_params
    params.require(:user).permit(:nickname,:introduce)
  end

edit.html.haml
.wrapper1.clearfix
  = render 'mypage/mypage-sidemenu'
  .profile-container
    %h2.container__profile プロフィール
    = form_for @user, url:"/users/#{@user.id}" , method: :patch, html:{class: "edit_form"} do |f|
      .container__name
        = image_tag "https://static.mercdn.net/images/member_photo_noimage_thumb.png", class: "image-tag"
        = f.text_field :nickname, value: "#{@user.nickname}" ,class: "edit_name"
      .container__text
        = f.text_area :introduce, value: "#{@user.introduce}",class: "introduce", placeholder: "例)こんにちは☆ ご覧いただきありがとうございます!かわいいものやきれいめオフィスカジュアル中心に出品しています。服のサイズは主に9号です。気持ちよくお取引できるよう心がけていますので、商品や発送方法などご質問がありましたらお気軽にどうぞ♪"
        .container__bottun
          = f.submit "変更する", class: 'change-profile-form__action-btn'

form_withだとなぜかエラーになったので、form_forにしている。

上記のようにしたが、更新ができない。。
controllerにbinding.pryを挟み、@user.valid?→@user.errors.full_messagesをしたところ、パスワードが求められる。(コンソール上でcurrent_userでログイン状態であることは確認済)

スクリーンショット 2019-07-12 19.07.16.png

#他のページ(ユーザー新規登録)でかけているvalidationが効いてしまっていた。

user.rb
  # バリデーション
  VALID_EMAIL_REGEX =                 /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  VALID_PHONE_REGEX =                 /\A\d{10}$|^\d{11}\z/
  VALID_ADDRESS_NUMBER_REGEX =        /\A[0-9]{3}-[0-9]{4}\z/
  validates :nickname,                presence: true, length: {maximum: 20}
  validates :email,                   presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX }
  validates :password,                presence: true, length: {minimum: 6, maximum: 128},on: :save_to_session_before_phone
  validates :password_confirmation,   presence: true, length: {minimum: 6, maximum: 128},on: :save_to_session_before_phone
  validates :password,                length: {minimum: 6, maximum: 128},on: :update,allow_blank: true
  validates :password_confirmation,   length: {minimum: 6, maximum: 128},on: :update,allow_blank: true
  validates :last_name,               presence: true
  validates :first_name,              presence: true
  validates :last_name_kana,          presence: true
  validates :first_name_kana,         presence: true
  validates :birthdate_year,          numericality: true
  validates :birthdate_month,         numericality: true
  validates :birthdate_day,           numericality: true
  validates :phone_number,            presence: true, uniqueness: true, format: { with: VALID_PHONE_REGEX }
  validates :address_last_name,       presence: true
  validates :address_first_name,      presence: true
  validates :address_last_name_kana,  presence: true
  validates :address_first_name_kana, presence: true
  validates :address_number,          presence: true, format: { with: VALID_ADDRESS_NUMBER_REGEX }
  validates :address_prefecture,      presence: true
  validates :address_name,            presence: true
  validates :address_block,           presence: true
  validates :address_phone_number,    allow_blank: true, format: { with: VALID_PHONE_REGEX }
end

下記変更点。

user.rb
validates :password,                presence: true, length: {minimum: 6, maximum: 128},on: :save_to_session_before_phone
  validates :password_confirmation,   presence: true, length: {minimum: 6, maximum: 128},on: :save_to_session_before_phone
  validates :password,                length: {minimum: 6, maximum: 128},on: :update,allow_blank: true
  validates :password_confirmation,   length: {minimum: 6, maximum: 128},on: :update,allow_blank: true

validationを増やし、on:アクション名で当該validationを使用するシーンを指定。
編集ページではallow_blankとすることで、空欄(未入力)で先に進めるようにしたら編集ができるようになった。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?