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) }
其中 @applications
是 ActiveRecord
(例如 Application.all
)。但是当我尝试访问它时(例如 order
、where
),它的类型更改为 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))
此外,这会将事物保持为一种关系,因此您可以继续链接额外的 where
、order
等调用。
我正在尝试在 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) }
其中 @applications
是 ActiveRecord
(例如 Application.all
)。但是当我尝试访问它时(例如 order
、where
),它的类型更改为 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))
此外,这会将事物保持为一种关系,因此您可以继续链接额外的 where
、order
等调用。