Rails where with greater than condition in join
Rails where with greater than condition in join
我有四个模型的层次结构:
Order
Job
belongs_to :order
Task
belongs_to :job
belongs_to :agent
Agent
我正在尝试搜索分配给 parent(大parent?)订单 due_date 大于 [=] 的代理的所有任务21=].
我似乎无法获得适合此搜索的语义。我最接近的是
agent.tasks.joins(job: :order)
.where("task.job.order.due_date > ?", DateTime.now)
但该语法不正确。正确的做法是什么?
您是否尝试过创建占位符条件,例如:
agents.tasks.join(job: :order).where("taks.job.order.due_date > :due_date", {:due_date = DateTime.now})
但我不知道你为什么要在那里使用 DateTime 对象。有什么特别的原因吗?
我个人会
agents.tasks.join(job: :order).where("tasks.job.order.due_date > ?", Time.now.getutc)
或者如果你不使用UTC,你可以使用相应的TimeZone。
此外,如果您使用不同的关联,您的 Order
class 或 has_many :through
中是否有 has_many
子句?
当您将字符串传递给 where
方法时,它要求您将其编写为有效的 SQL 查询。在您的情况下,问题在于您如何引用 table 名称。而rails可以解析一个Hash结构,通过belongs_to
和has_many
的声明,可以理解下面的意思
{ task: { job: { order: { due_date: Date.today } } } }
数据库不明白下面怎么办
tasks.job.order.due_date
而且也不需要。由于您已经通过使用 joins(job: :order)
指定了 table 是如何链接在一起的,因此您需要在 where
调用中说的内容如下:
.where("orders.due_date > ?", DateTime.now)
我有四个模型的层次结构:
Order
Job
belongs_to :order
Task
belongs_to :job
belongs_to :agent
Agent
我正在尝试搜索分配给 parent(大parent?)订单 due_date 大于 [=] 的代理的所有任务21=].
我似乎无法获得适合此搜索的语义。我最接近的是
agent.tasks.joins(job: :order)
.where("task.job.order.due_date > ?", DateTime.now)
但该语法不正确。正确的做法是什么?
您是否尝试过创建占位符条件,例如:
agents.tasks.join(job: :order).where("taks.job.order.due_date > :due_date", {:due_date = DateTime.now})
但我不知道你为什么要在那里使用 DateTime 对象。有什么特别的原因吗?
我个人会
agents.tasks.join(job: :order).where("tasks.job.order.due_date > ?", Time.now.getutc)
或者如果你不使用UTC,你可以使用相应的TimeZone。
此外,如果您使用不同的关联,您的 Order
class 或 has_many :through
中是否有 has_many
子句?
当您将字符串传递给 where
方法时,它要求您将其编写为有效的 SQL 查询。在您的情况下,问题在于您如何引用 table 名称。而rails可以解析一个Hash结构,通过belongs_to
和has_many
的声明,可以理解下面的意思
{ task: { job: { order: { due_date: Date.today } } } }
数据库不明白下面怎么办
tasks.job.order.due_date
而且也不需要。由于您已经通过使用 joins(job: :order)
指定了 table 是如何链接在一起的,因此您需要在 where
调用中说的内容如下:
.where("orders.due_date > ?", DateTime.now)