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)
但该语法不正确。这样做的正确方法是什么?
当您将字符串传递到where方法中时,它要求您将其编写为有效的 SQL 查询。在您的情况下,问题在于您如何引用表名。虽然轨道可能会通过的宣言解析哈希结构,belongs_to并has_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)