在ActiveRecord查询中测试空字符串

Jos*_*arl 1 activerecord ruby-on-rails

在Rails应用程序中,使用ActiveRecord where方法检查属性是零还是空的最简洁方法是什么?

这有效,但似乎应该有一个更好的,内置的方式来做到这一点:

@items = Item.where :context => nil || ''
Run Code Online (Sandbox Code Playgroud)

当您的搜索包含"where"等词语时,Google-fu很难做到很多.

Luc*_*ain 16

你所拥有的东西是行不通的.

@items = Item.where context: nil || ''
Run Code Online (Sandbox Code Playgroud)

真的评估为:

@items = Item.where context: ''
Run Code Online (Sandbox Code Playgroud)

因此,您将找不到context设置为nil使用此方法的项目.

边注

thing || other以这种方式使用永远不会奏效.你可以不写if item == 'test' || 'something',并期望它能情况无效item'something'.它只会在情况下工作item'test'.要使这样的东西起作用,你需要写if item == 'test' || item == 'something'.这不是人类说话的方式,而是计算机阅读的方式.

回到主赛事

编写可行的查询的一种方法是:

Item.where("context = ? or context = ?", nil, '')
Run Code Online (Sandbox Code Playgroud)

这为读取:找到的所有项目,其中contextnil或者context''.

虽然这有效,但它并不是特别"Rails-y".更好的方法是:

Item.where(context: [nil, ''])
Run Code Online (Sandbox Code Playgroud)

这为读取:找到的所有项目,其中context[nil, ''].

相关问题