【結論】
・Railsでは、blank?
やpresent?
で、オブジェクトの有無を判定することができる。
・モデルのインスタンスの場合、カラム名の後に?
を加えることで、属性(attribute)に値が入っているか判定することが出来る
・後者の方が、コードがシンプルになる為、Rails Best Practicesなどでは推奨されている
【目次】
【本題】
Railsでオブジェクトの有無を判定する方法
Railsでは、オブジェクトの有無を判定する為のメソッドとして、blank?
やpresent?
などが存在します。
# 値が空の場合 @user.name = '' @user.name.blank? =>true @user.name.present? =>falase # 値がある場合 @user.name = 'ほげ助' @user.name.blank? =>falase @user.name.present? =>true
Railsでオブジェクトの有無を判定する方法
ActiveRecordのプロパティであれば、プロパティ名の後に?
を加えることで、値の有無を判定することが出来ます
# 値が空の場合 @user.name = '' @user.name? =>false # 値がある場合 @user.name = 'ほげ助' @user.name? =>ture # 数値は0の時にfalseを返す @user.number = 0 @user.number? =>false
これは以下のActiveRecordのコードから提供されている機能です。
rails/query.rb at v4.2.1 · rails/rails · GitHub
参考情報
Rails Best Practices - Use query attribute
ActiveRecordのプロパティにblank? や present? をする必要はなかった! - Qiita
Rails Best Practices の警告をちゃんと考える - Qiita
RailsのAttribute query methodsの挙動 | このコードわからん
《今日の学習進捗(3年以内に10000時間に向けて)》
・一括登録
ユーザー情報をCSVから一括登録する機能の実装を進めている。それにあたり、Userに紐づく子レコードのバリデーションを一括登録時は外す処理を組み込もうとしているが、現状見つかっていない。
詳しい調査はまだだが、一部の記事にはRails側に用意されていないと説明されていたりした為、別の方法を検討する必要があるかもしれない。
バリデーション周りの実装方法について再度調査した上で、対応を検討したい。
・文字化け対応
IEでCSVファイルとダウンロードすると、ファイル名が文字化けする事象が発生した。
UTF-8からshift-jisに変換することで、IE側の文字化けは解消されるが、その場合、Chromeで文字化けが発生してしまった。
OSに限らず、ブラウザ毎にも文字コードの対応状況に差異があるということを初めて認識した。 一旦はブラウザ毎に処理を切り分ける事になりそうだ。
文字コードの問題については、これまで何度も発生しており、バグの温床となっている。 現在開発中のユーザー一括登録でも恐らく文字コード関連の問題が発生することが想定されるので、慎重に進めたい。
・レビューの観点の整理
バグの見逃しを抑止する取り組みの一環で、レビューを実施する上での観点を洗い出して、プルリクエストのテンプレートに取りまとめている。
過去の障害事例などの踏まえて、出来るだけ網羅的にチェック項目を選定したが、項目数がかなり多くなってしまった。
チェック項目が多くなるほど、レビュワーの負担が増えて開発コストが増大したり、チェックが形骸化してしまう恐れがあるので、実際に運用するには、もう少し整理が必要だと感じる。 一方で、十分なチェックがなされていなければ、バグを見逃してしまう可能性が高まる。両方のバランスが取れたラインを探りたい。
学習開始からの期間 :242日
今日までの合計時間:2313h
一日あたりの平均学習時間:9.6h
今日までに到達すべき目標時間:2210h
目標との解離:103h
「10,000時間」まで、
残り・・・「7687時間!」