我有2个模型:Task和TaskLimit。 Task属于TaskLimit。但是task_limit_id可能为Nil,因此我需要使用LEFT JOIN来预加载现有的TaskLimit。 我可以加入的唯一方法是:
query = query.join(:task_limit).preload(:task_limit)
但是它不会选择没有TaskLimit的任务。 Query类的源代码中有一个方法,我可以为JOIN指定String:
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中的:没有重载匹配类型为String的'Crecto :: Repo :: Query#join' 重载是: -Crecto :: Repo :: Query#join(join_associations:Array(Symbol)) -Crecto :: Repo :: Query#join(join_association:Symbol)
query = query.join(“左联接task_limits开启task.task_limit_id = task_limits.id”)。preload(:task_limit).where(id:[43,46])
如何预加载与LEFT JOIN的关联?