【问题标题】:Using lambdas in scope to return records在范围内使用 lambdas 来返回记录
【发布时间】:2018-06-12 12:56:08
【问题描述】:

我有以下范围来返回客户的余额。余额不是一个字段,而是Client 模型上的一个函数。

def balance
    purch = self.purchases.map(&:total).sum
    pay = self.payments.sum(:amount)
    return purch - pay
end

scope :with_balance, -> { lambda {|client| { conditions: client.balance > 0}}}

这样做的结果是一个#<Proc:> 元素,但我不确定如何从中获取客户,或者这种方法是否完全错误。

【问题讨论】:

  • 范围 :with_balance, -> { where('balance > ?', 0) }
  • ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "balance" does not exist 我包含了它是一个方法而不是列的事实,因为您无法使用 mthods 执行 where 查询
  • 你可以从这里找到一些帮助 - stackoverflow.com/questions/49030775/…

标签: ruby-on-rails lambda scope


【解决方案1】:


嗨杰里米!

scope :with_balance, -> { lambda {|client| { conditions: client.balance > 0}}}

“条件”没有选项,所以我认为使用“选择”是过滤具有正余额的客户的合理解决方案。

我的解决方案:

scope :with_balance, (lambda do
  select {|client| client.balance > 0}
end)

快乐编码:)

【讨论】:

  • 我想唯一的缺点是它会导致一个数组,防止链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2019-09-30
  • 2014-04-14
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多