Rails Lambda ActiveRecord

Rails Lambda ActiveRecord

我正在尝试在 Rails 上的 ActiveRecord 中的 where() 方法中实现 lambda。这是我的代码:

 @applications.where { |app| !((calculate_days_ago(app.shipping_date) >= 10 && calculate_days_ago(:app.shipping_date) <= 19) || app.followup_calls.count == 0) }

其中 @applicationsActiveRecord(例如 Application.all)。但是当我尝试访问它时(例如 orderwhere),它的类型更改为 WhereChain 并且我有一个例外:

undefined method `where' for #ActiveRecord::QueryMethods::WhereChain:0x6fb1000>

有没有一种方法可以在我的 where() 条件下使用正确的 return 类型实现 lambda 表达式?

注意:我有 C# 背景,这样的 lambda 可以那样做,我是 Ruby 和 Rails 的新手。我不知道这个社区 bash 有反对票的新手。我尽力让我的问题尽可能清楚。

where 方法不接受(或者至少不会使用)传递给它的任何块。如果要根据任意 ruby 代码进行过滤,请使用

@applications.select {|app| !((calculate_days_ago(app.shipping_date) >= 10 && calculate_days_ago(:app.shipping_date) <= 19) || app.followup_calls.count == 0) }

请注意,这会获取所有与范围内任何先前条件匹配的行,从中创建活动记录对象,然后过滤它们 - 如果可能的话,通常重写它以使用 where 例如

@applications.where(:shipping_date => (19.days.ago .. 10.days.ago))

此外,这会将事物保持为一种关系,因此您可以继续链接额外的 whereorder 等调用。