如何重写此rails 4查询以减少代码

时间:2014-10-17 17:55:45

标签: ruby-on-rails activerecord

我有一个Rails查询,我选择所有名称字段为空或零的试用ID。有没有办法重写这个更清洁?

Trial.where(names: "").pluck(:id) + Trial.where(names: nil).pluck(:id)

2 个答案:

答案 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