我已通过rails控制台确认此记录不存在。但是,当我运行此代码时,“它存在”会被打印到控制台。
我是如何使用ruby查询数据库的?
if Companyavg.where(:company => 'goog', :word => 'baa')
puts 'it exists'
else
puts 'doesnt exist'
end
答案 0 :(得分:3)
变化:
if Companyavg.where(:company => 'goog', :word => 'baa')
为:
if Companyavg.where(:company => 'goog', :word => 'baa').exists?
这比使用present?
更有效,因为它可以运行优化查询以返回正确的结果。
您拥有的初始查询将始终是真实的,因为它返回ActiveRecord::Relation
(简单来说,是一个懒惰的未触发查询)。
答案 1 :(得分:0)
尝试
Companyavg.where(:company => 'goog', :word => 'baa).empty?
问题是where
调用正在返回一个查询,但它实际上并不会运行查询,直到它绝对必须。所以在这种情况下,你正在评估一个非零的非假对象的真值,因此根据Ruby的规则true
。
答案 2 :(得分:0)
这是因为where返回一个空关系。在ruby中只有nil和false语句被评估为false。例如0和“”(空字符串)计算为true。