「ruby on rails」カテゴリーアーカイブ

RailsのAttribute query methodsの挙動

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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?`

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