在Ruby on Rails中是否有一种干嘛的方法可以做到这一点

时间:2016-02-26 12:52:56

标签: ruby-on-rails ruby dry

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

    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方式来做。

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

1 个答案:

答案 0 :(得分:1)

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

#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)