我想知道,有没有办法让下面的代码更简单?
def my_filer model_names
model_names.keep_if { |x| not x.empty? }
unless model_names.empty?
where 'model_name_field in (?)', model_names
else
self
end
end
答案 0 :(得分:2)
def my_filter model_names
model_names = model_names.to_a.select(&:present?)
model_names.present? ? where( :model_name_field => model_names) : self
end
注意:当您对IN
子句使用哈希表示法时,Rails会将数组值转换为where
语句。
答案 1 :(得分:1)
这个怎么样?
def my_filer model_names
model_names.reject!(&:empty?)
if model_names.empty?
self
else
where 'model_name_field in (?)', model_names
end
end
答案 2 :(得分:1)
这是“更简单”,但IMO,它的可读性较差。我建议你个人使用更详细,更容易理解的版本。
def my_filer(model_names)
return self if (names = Array(model_names).reject(&:empty?)).empty?
where 'model_name_field in (?)', names
end
答案 3 :(得分:1)
def my_filer model_names
model_names.reject!(&:empty?)
model_names.empty? ? self : where 'model_name_field in (?)', model_names
end
不简单,但形式不同。
或者您可以使用&&
和||
来表达三元组。
可能不太常用的是and
和or
运算符。