2016-02-26 54 views
0

我有一個採用可選參數的方法。而在方法,我在這樣的可選參數做查詢:在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等。但我想用乾的方式來做到這一點。

我很確定有一種方法,但找不到與之相關的任何內容。

+0

的方法有一個可選的參數通常是這樣做:'高清filter_element(參數1,參數2 =零)'。此外,本地變量'filtered_element'和'filtered_advertiesments'永遠不會被使用。 – Stefan

+0

我更新了代碼。此方法返回filtered_element。據我所知,在查詢中傳遞nil不是一個好習慣,因此沒有零作爲默認值。 – tanvir2362

+0

您不必將返回值分配給一個變量,即刪除'filtered_element ='並只寫'...? Model_class.where(...):Model_class.where(...)' – Stefan

回答

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) 
+1

在你的代碼中,'options'是數組中的一個散列,它將導致異常。只是擺脫星號,事情會很好。或者甚至更好,使用'def filter_element(city,options = {})'有一個實際的可選參數。 –

+0

或使用[關鍵字參數](http://ruby-doc.org/core-2.3.0/doc/syntax/methods_rdoc.html#label-Keyword+Arguments),即'def filter_element(city,price:nil) ' – Stefan

+0

好吧,讓我試試這個。謝謝 – tanvir2362

相關問題