データサイエンティストハトリのブログ

PythonとインテリジェントクラウドとAIが好きな学生エンジニア。データ分析、スクレイピング、就職活動などについて書いていきます。

RailsでUserモデルのカラムを一部だけupdateしようとしたらできなかった

f:id:hatorihatorihatorik:20180929020210j:plain

 

こんにちは、どうもハトリです!!

 

TwitterでプログラミングやIT関連のことについてつぶやいているのでよかったら是非フォローしてください →→(@tori_engineer)

 

 

やろうとしたこと

railsで開発。deviseは使っていません。

  

Userモデルには、新規登録時にのみ登録できるカラムと、編集ページでのみ登録できるカラムがあります。

 

もうちょっと具体的に言うと、

初期登録時にはid, 名前, パスワード, メールアドレスを登録。

編集画面では自己紹介、アイコン、ニックネームを登録する仕様。

 

 

初期登録時に必要なid, 名前, パスワード, メールアドレスにはvalidationを設定。

 編集ページで設定できる自己紹介、アイコン、ニックネームに関してはvalidationは設定しません。

できなかったこと

モデル、ビュー、コントローラーの設定が終わったところで早速実行しましたができませんでした。

 

終わったように見えつつリダイレクトされて編集前の画面へ。

 

ターミナルでログを読んでみると、、、、「Password can't be blank」というメッセージが表示されていました。

 

updateをするときにvalidationが邪魔をしていたみたいです。

 

解決策

 

「validate_on_create」「validate_on_update」メソッドを定義して上げることで解決できました。

 

User.rbにこのコードを書くとvalidationの効果範囲の設定をすることができます。このメソッドを使ってcreateの時に必要なvalidationとupdateの時に必要なvalidationを分けることで解決しました。

 

def  validate_on_create

 # createの時に使うvalidation

end

def validate_on_update

 # updateの時に使うvalidation

end

  

今回はこのサイトを参考にさせていただきました。

d.hatena.ne.jp