2016-03-08 66 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