2

我已通过 rails 控制台确认此记录不存在。但是,当我运行此代码时,“它存在”会打印到控制台。

我如何使用 ruby​​ 查询数据库有问题吗?

        if Companyavg.where(:company => 'goog', :word => 'baa')
            puts 'it exists'
        else
            puts 'doesnt exist'
        end
4

3 回答 3

3

改变:

if Companyavg.where(:company => 'goog', :word => 'baa')

至:

if Companyavg.where(:company => 'goog', :word => 'baa').exists?

这比使用更有效,present?因为它可以运行优化查询以返回正确的结果。

您拥有的初始查询将始终是真实的,因为它返回一个ActiveRecord::Relation(简单来说,一个惰性未触发查询)。

于 2013-04-23T21:11:20.813 回答
0

这是因为 where 返回一个空关系。在 ruby​​ 中,只有 nil 和 false 语句评估为 false。例如 0 和 "" (空字符串)评估为真。

于 2013-04-23T21:18:33.383 回答
0

尝试

Companyavg.where(:company => 'goog', :word => 'baa).empty?

问题是where调用正在返回一个查询,但它实际上并没有运行查询,直到它绝对必须运行。因此,在这种情况下,您正在评估一个非零、非假对象的真值,因此true这符合 Ruby 的规则。

于 2013-04-23T21:11:20.657 回答