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