在.where查询中调用Rails对象上的方法

时间:2015-03-30 17:41:10

标签: ruby-on-rails postgresql activerecord

我有一个对象订单,每个订单has_many line_items(这些都是电视广告)。 LineItem将日期作为属性,即line_item运行的日期。要计算订单开始和结束日期,我使用line_items上的日期。因此,我采取最早的日期line_item和最近或最远的未来订单项,这些成为订单的开始和结束日期。您可以在下面看到计算开始日期和结束日期的方法。

def start_date
 line_items.first.date rescue nil
end

def end_date
 line_items.last.date rescue nil
end

现在我需要能够获得当月的所有订单。我试图使用.where查询调用查询中的start_date和end_date方法。请参阅下面的查询。

Order.where(start_date <= ? AND end_date >= ?', Date.today.beginning_of_month, Date.today.end_of_month)

我收到错误

PG::UndefinedColumn: ERROR:  column "start_date" does not exist

是否可以在.where查询中调用方法?

1 个答案:

答案 0 :(得分:0)

不,不可能在WHERE查询中调用方法。

如果没有您的数据库架构,我无法编写工作代码,但您应该使用JOIN将line_items记录包含到结果集中,然后才将条件应用于line_items字段。