如何将默认参数传递给Rails lambda / scopes?

时间:2016-03-08 19:58:12

标签: ruby-on-rails ruby lambda

我的帐户模型上有这段代码。

 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,所以我不能按照rails建议的正常方式编写它,如下所示:

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的默认参数。有人可以提供一点推动吗?

1 个答案:

答案 0 :(得分: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