属性の値をBooleanとして評価する
属性名? メソッドを使うと属性の値がBooleanとして解釈される。
0(数値),"0"(文字列),"f","false"(文字列),"",nil,false(Rubyのbool型定数)=>false
それ以外=>true
p user.name #=> "false" p user.name? #=> false p user2.name #=> "David" p user2.name? #=> true p user3.name #=> 0 p user3.name? #=> false
そのほかの値をBool値として使う場合はメソッドをオーバーライドする。
class Name < ActiveRecord::Base def name? self.name == 'David' end end p user4.name #=> "David" p user4.name? #=> true p user5.name #=> "Dona" p user5.name? #=> false
上の例だとtrueとみなす条件を定義している(name属性の値が'David'だとtrue、それ以外はfalse)が、
オーバーライドするメソッドを
def name? self.name != 'David' end
のようにすれば、falseとみなす条件を定義できる(name属性の値が'David'だとfalse、それ以外はtrue)
条件が複数の場合は || (or演算子)でつなげばよい。
当たり前だけど、メソッドをオーバーライドすると標準の解釈はしない。
p user6.name #=> 0 p user6.name? #=> true