在 Rails 上的 Ruby 中是否有一种 DRY 方法可以做到这一点

Is there a DRY way to do this in Ruby on Rails

我有一个采用可选参数的方法。在我对可选参数进行查询的方法中,如下所示:

    def filter_element(param1, *param2)
      param2[0].empty? ? filtered_element = Model_class.where('city = ?',   param1) : filtered_element = Model_class.where('city = ? and price <= ?', param1, param2[0].to_i)
    end

这是一个将一个可选参数传递给方法的示例。

我的问题是,如果我有多个可选参数并且想根据它的存在在查询参数中使用它,我该怎么做?

我知道我可以使用 if、elsif 等。但我想使用 DRY 方式来实现。

我很确定有办法,但找不到与之相关的任何内容。

我认为这可以用不同的方式来完成

#it's better to pass arguments not like array, but as hash
def filter_element(city, options = {})
  scope = Model_class.where(city:  city)
  scope = scope.where('price <= ?', options[:price].to_i) if options[:price].present?
  #some more scope limitation here

  scope
end

element = filter_element('Minsk', price: 500)