【问题标题】:How can I pass a default argument to Rails lambda/scopes?如何将默认参数传递给 Rails lambda/scopes?
【发布时间】:2016-03-08 19:58:12
【问题描述】:

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

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

【问题讨论】:

  • 只需做lambda { |limit = nil|

标签: ruby-on-rails ruby lambda


【解决方案1】:

您可以简单地为块参数提供默认值:

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

【讨论】:

  • nil 提供给limit 是可以的:它不会限制结果。所以如果什么都不给,就会返回所有的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多