バリデーションの記述方法
お疲れ様です!
IHです!
さて、久しぶりにブログの方でもアウトプットをしていきたいと思います!
今日はバリデーションについて学びがあったので、簡単に振り返ります!
ーーーーーーーーーーーーーーーー
本日は、最終課題でユーザー管理機能の実装をしており、
app/models/user.rbに、以下のようなバリデーションの記述をしていたところ、メンターさんに修正するよう言われました。
*
validates :nickname, presence: true, uniqueness: true
validates :birth_day, presence: true
with_options presence: true, format: { with: /\A[ぁ-んァ-ン一-龥]+\z/, message: 'Full-width characters' } do
validates :first_name
validates :family_name
end
with_options presence: true, format: { with: /\A[ァ-ン]+\z/, message: 'Full-width katakana characters' } do
validates :first_name_furigana
validates :family_name_furigana
end
*
簡単にいうと、以下のような制限をかけています。
・まず、全てのカラムに「空欄では保存できない」という制限をかけている
・nicknameカラムには「既に保存されている、他ユーザーのニックネームと重複していれば保存できない」という制限もかけている
・first_nameカラムとfamily_nameカラムには「全角のデータのみ保存する」という制限もかけている
・first_nameカラムとfamily_nameカラムには「全角のカタカナのみ保存する」という制限もかけている
ローカル環境で試したところ、この記述でも問題なく制限が働いているようです。
このままメンターさんにコードレビュー依頼をしました。
しかし、メンターさんには
「これでは読みづらいので、「with_options presence: true ~ end」の中に、バリデーションを記述しましょう。オプションは、各カラム毎につけてください」
といったアドバイスをいただき、記述例も見せていただきました。
確かに、可読性という点では難ありな記述ですねー。
そういうわけで、以下のように記述を変えました。
*
with_options presence: true do
validates :nickname, uniqueness: true
validates :birth_day
validates :first_name, format: {with: /\A[ぁ-んァ-ンー-龥]+\z/, message: 'Full-width characters'}
validates :family_name, format: {with: /\A[ぁ-んァ-ン一-龥]+\z/, message: 'Full-width characters'}
validates :first_name_furigana, format: {with: /\A[ァ-ン]+\z/, message: 'Full-width katakana characters'}
validates :family_name_furigana, format: {with: /\A[ァ-ン]+\z/, message: 'Full-width katakana characters'}
end
*
いかがでしょう?
確かにひとまとめにすることで、ごちゃごちゃ感はだいぶなくなりましたね。
以上のような記述に修正すると、メンターさんにLGTMをいただくことが出来ました!
今後は
「動けばいい!」
ではなく
「他の人から見ても読みやすいコードを書けているか?」
ということを意識していかないとなぁ、と感じた一日でした。
ーーーーーーーーーーーーーーーー
いかがでしたか?
これから現場で働くにあたって、
「読みやすいコードかどうか?」
は非常に大事な要素ですものね。
今後は可読性も注意しながら最終課題の制作に当たりたいと思います!
それでは、本日はこの辺で!
ここまで読んでくださりありがとうございました!