• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

# 不要这样使用

user = Users.find_by_name("Dave")

if user.superuser

grant_privileges

end

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

# 这样是正确的

user = Users.find_by_name("Dave")

if user.superuser?

grant_privileges

end

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

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

class User < ActiveRecord::Base

def superuser?

self.superuser == 'J'

end

# . . .

end


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ERROR: Error installing redis redis requires Ruby version = 2.2.3发布时间:2022-07-14
下一篇:
RubyOnRails中MVC架构浅谈发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap