rubyonrails:Ruby on rails开发从头来( 4十)- ActiveRecord基础(Boolean属性)

  些数据库支持boolean类型而另些则不支持这使得Active Record要抽象boolean类型变得困难例如如果数据库不支持boolean类型开发者使用char(1)来替代而内容使用“t”和“f”来表示true和false而另外些开发者使用eger类型0是false1是true即使数据库支持boolean类型在内部也许还是使用0和1来存储

  在Ruby里在条件判断中数字0和f都被认为是true值这就意味着如果你直接使用属性代码会被认为该列值是true而不是你认为false例如:

  # 不要这样使用

user = Users.find_by_name("Dave")
user.superuser
grant_privileges
end


  当在查询条件中使用属性时你必须在列名后添加个问号:

  # 这样是正确

user = Users.find_by_name("Dave")
user.superuser?
grant_privileges
end


  当使用访问操作符来获取属性值时当值为数字0或者“0”“f”,“false”或“”(空串)或nil个常量false时都被认为是false否则就会被认为是true

  如果你在个遗留系统上或者非英语系统上开发上面对true定义也许会无法工作在这种情况下你可以override内建谓词思路方法定义例如荷兰语情况下字段也许包含J或者N这种情况下你可以像下面这样:

User < ActiveRecord::Base
def superuser?
self.superuser 'J'
end
# . . .
end


Tags:  rubyonrails安装 rubyforrails rubyrails rubyonrails

延伸阅读

最新评论

发表评论