在 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)
我有一个采用可选参数的方法。在我对可选参数进行查询的方法中,如下所示:
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)