我有一个采用可选参数的方法。在方法中,我正在查询可选参数,如下所示:
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方式来做。
我很确定有办法,但无法找到与之相关的任何内容。
答案 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)