2016-03-08 63 views
2

我在賬戶模型上有這段代碼。如何將默認參數傳遞給Rails lambda/scopes?

scope :unverified, lambda { |limit| 
    select('accounts.id, accounts.email').joins('LEFT OUTER JOIN verifications v ON v.account_id = accounts.id') 
    .where('v.account_id IS NULL').limit(limit) 
} 

因爲我的團隊有rubocop嚴格的設置,我不能寫它的正常方式軌建議這將是這樣的:

scope :unverified, -> (limit = nil) { 
    select('accounts.id, accounts.email').joins('LEFT OUTER JOIN verifications v ON v.account_id = accounts.id') 
    .where('v.account_id IS NULL').limit(limit) 
} 

寫它的正常方式將觸發rubocop錯誤。我的代碼接近我想要的方式,但我無法弄清楚如何傳入lambda的默認參數。有人可以提供一點點推動?

+2

只需執行'lambda {| limit = nil | ' – MrYoshiji

回答

0

你可以簡單地提供缺省塊參數:

scope :unverified, lambda { |limit = nil| 
    select('accounts.id, accounts.email').joins('LEFT OUTER JOIN verifications v ON v.account_id = accounts.id') 
    .where('v.account_id IS NULL').limit(limit) 
} 

但如果是有意義的傳遞nil.limit()沒有把握。您可能需要將其默認爲integer

+0

給''限制''nil'好:它不會限制結果。所以如果沒有提供,所有的結果將被返回。 – MrYoshiji