我有一个Rails查询,我选择所有名称字段为空或零的试用ID。有没有办法重写这个更清洁?
Trial.where(names: "").pluck(:id) + Trial.where(names: nil).pluck(:id)
答案 0 :(得分:1)
我知道如何写它的最短路是:
Trial.where(name: [nil, '']).ids
这将找到Trial
为NULL或空白的所有name
条记录ID。 Tt生成以下SQL:
SELECT `trials`.`id` FROM `trials` WHERE ((`trials`.`name` = '' OR `trials`.`name` IS NULL))
答案 1 :(得分:0)
Trial.where("names = '' or names is null").pluck :id
修改强>
有一个更清洁的选择。创建这样的范围:
试用型号
class Trial < ActiveRecord::Base
scope :ids_with_blank_names, where("names = '' or names is null").pluck :id
end
然后在您的控制器中,您只需使用Trial.ids_with_blank_names