crystal-lang - 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 的关联?
解决方案
推荐阅读
- c# - 如何使用 BsonDocument 按日期过滤文档
- java - Oracle jdbc 驱动程序在支持的映射类型上抛出错误
- c# - 如何通过代码向 UWP 应用添加 EasingFunction
- ios - 如何根据用户位置重新调整 SKNodes
- image - 有什么图像分割算法推荐吗?
- python - 如何将提交 ModelForm 的用户的信息传递到 ManyToMany 保存?
- python - python中的单方括号和双方括号
- visual-studio - 使用 vs 2017 的 rust 扩展为 Visual Studio 2017 配置 rustup
- python - 如何在 Python 中的 uniform_form torch 之后应用操作?
- android - 如何使按钮将特定文本添加到列表视图中