加入条件大于条件的 Rails

mpi*_*orn 3 join where-clause ruby-on-rails-4

我有四个模型的层次结构:

Order

Job
  belongs_to :order

Task
  belongs_to :job
  belongs_to :agent

Agent 
Run Code Online (Sandbox Code Playgroud)

我正在尝试搜索分配给代理的所有任务,其中父(祖父母?)订单的 Due_date 大于 DateTime.now。

我似乎无法获得适合此搜索的语义。我最接近的是

agent.tasks.joins(job: :order)
           .where("task.job.order.due_date > ?", DateTime.now)
Run Code Online (Sandbox Code Playgroud)

但该语法不正确。这样做的正确方法是什么?

Dan*_*nne 5

当您将字符串传递到where方法中时,它要求您将其编写为有效的 SQL 查询。在您的情况下,问题在于您如何引用表名。虽然轨道可能会通过的宣言解析哈希结构,belongs_tohas_many可以了解以下方法

{ task: { job: { order: { due_date: Date.today } } } }
Run Code Online (Sandbox Code Playgroud)

数据库不明白如何处理以下内容。

tasks.job.order.due_date
Run Code Online (Sandbox Code Playgroud)

它也不需要。由于您已经使用 指定了表的链接方式joins(job: :order),因此您需要在where调用中说明以下内容:

.where("orders.due_date > ?", DateTime.now)
Run Code Online (Sandbox Code Playgroud)