如果id的数组不为空,则查找“IN”

时间:2013-07-23 05:58:11

标签: ruby-on-rails ruby

我想知道,有没有办法让下面的代码更简单?

  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

4 个答案:

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

不简单,但形式不同。

或者您可以使用&&||来表达三元组。

可能不太常用的是andor运算符。

相关问题