RailsのAttribute query methodsの挙動

なんとなく奇妙だったのでなんとなく使ってこなかったAttribute query methods。
ちゃんと調べた。

一体何の話かというと、Railsのモデルのインスタンスには、カラム名に?を付けたメソッドが使えるようになる。
こんなの ↓

user = User.first

user.name = ''
user.name?
# => false

user.name = 'pugi'
user.name?
# => true

user.num = 0
user.num?
# => false

user.num = 1
user.num?
# => true

この挙動、、present?とも!!とも違う。。
なんだこれは、、、と思うけど、この処理の正体はActiveRecord::AttributeMethods::Query#query_attributeにあり、ここを見ると

  • trueの場合はtrue
  • false,nilの場合はfalse
  • 数字カラムの場合は!zero?
  • それ以外の種類のカラムの場合は!blank?

という分岐があった、なるほどな。
これで安心して使っていけますね。(多分そんなに使わない

タイトルとURLをコピーしました