Ruby on rails rails 3,其中嵌套条件
好的,我有这个Ruby on rails rails 3,其中嵌套条件,ruby-on-rails,ruby,ruby-on-rails-3,where,Ruby On Rails,Ruby,Ruby On Rails 3,Where,好的,我有这个 User.find(4).friends [#<Contact id: 67, type: nil, default_contact_group: false, primary_contact_id: nil, invitation_code: nil, flag_for_review: true, code_name: nil, reset_password_token: nil, ....... ....... User.find(4).friends.cou
User.find(4).friends
[#<Contact id: 67, type: nil, default_contact_group: false, primary_contact_id: nil, invitation_code: nil, flag_for_review: true, code_name: nil, reset_password_token: nil,
.......
.......
User.find(4).friends.count
=> 5
User.find(4).friends.map(&:type)
=> [nil, nil, nil, nil, nil]
我做错了什么?为什么它不返回这些记录,这些记录显然与朋友匹配,并且已经是一个数组,并且将响应
friends
已经是一个数组,将响应
我假设数据库中
type
列的值实际上是NULL
然后您现在观察到NULL
值的一个有趣方面。将NULL
与另一个值进行比较的结果既不是TRUE
也不是FALSE
,其未知
。因此,在数据库中,将值与NULL
进行比较从来都不是真的,反之亦然。这就是为什么在上次查询中看不到任何结果
为了缓解这种情况,有一个特殊的比较运算符:为NULL
和不为NULL
。您可以从rails使用它,如下所示:
User.find(4).friends.where(["type != ? or type IS NOT NULL", "ContactGroup"])
我假设数据库中
type
列的值实际上是NULL
然后您现在观察到NULL
值的一个有趣方面。将NULL
与另一个值进行比较的结果既不是TRUE
也不是FALSE
,其未知
。因此,在数据库中,将值与NULL
进行比较从来都不是真的,反之亦然。这就是为什么在上次查询中看不到任何结果
为了缓解这种情况,有一个特殊的比较运算符:为NULL
和不为NULL
。您可以从rails使用它,如下所示:
User.find(4).friends.where(["type != ? or type IS NOT NULL", "ContactGroup"])
您不应该使用列名
type
,因为Rails是如何实现单表继承的
它仍然适用于Rails 3。在Rails3控制台中,我在尝试执行您正在尝试的相同类型的操作时遇到此错误
ActiveRecord::SubclassNotFound:单表继承机制
未能找到子类:“test”。出现此错误是因为
“type”列保留用于存储类,以防
遗产如果您不打算将此列重命名,请将其重命名
用于存储继承类或覆盖
VideoFile.u列使用另一个列
信息
您不应该使用列名
type
,因为Rails是如何实现单表继承的
它仍然适用于Rails 3。在Rails3控制台中,我在尝试执行您正在尝试的相同类型的操作时遇到此错误
ActiveRecord::SubclassNotFound:单表继承机制
未能找到子类:“test”。出现此错误是因为
“type”列保留用于存储类,以防
遗产如果您不打算将此列重命名,请将其重命名
用于存储继承类或覆盖
VideoFile.u列使用另一个列
信息
现在想象一下,朋友名单是巨大的。当你可以在数据库中进行过滤时,你真的不想在Ruby中进行过滤……现在想象一下,朋友列表是巨大的。当你可以在数据库中进行过滤时,你真的不想在Ruby中进行过滤。。。
User.find(4).friends.where(["type != ? or type IS NOT NULL", "ContactGroup"])