首页 > 解决方案 > Amber Crecto:与 LEFT JOIN 的预加载关联

问题描述

我有 2 个模型:Task 和 TaskLimit。任务属于TaskLimit。但是 task_limit_id 可能是 Nil,所以我需要使用 LEFT JOIN 来预加载现有的 TaskLimit。我可以加入的唯一方法是:

query = query.join(:task_limit).preload(:task_limit)

但它不会选择没有 TaskLimit 的任务。Query 类的源代码中有一个方法,我可以在其中为我的 JOIN 指定字符串:

def self.join(join_string : String) self.new.join(join_string) end

但是当我尝试使用它时:

query.join("LEFT JOIN task_limits ON tasks.task_limit_id = task_limits.id").preload(:task_limit)

我收到该方法不存在的错误:

在 tmp/1537794230627_console.cr:2 中:没有重载与字符串类型的“Crecto::Repo::Query#join”匹配 重载为:- Crecto::Repo::Query#join(join_associations : Array(Symbol)) :Repo::Query#join(join_association : 符号)

query = query.join("LEFT JOIN task_limits ON tasks.task_limit_id = task_limits.id").preload(:task_limit).where(id: [43, 46])

如何预加载与 LEFT JOIN 的关联?

标签: crystal-langamber-framework

解决方案


推荐阅读