如何将sql中的查询转换为rails中的查询
Posted
技术标签:
【中文标题】如何将sql中的查询转换为rails中的查询【英文标题】:How to transform query in sql for query in rails 【发布时间】:2021-09-19 07:17:30 【问题描述】:如何使用左连接转换此查询,并且在 rails 中不存在查询,我使用的是 rails 6.0.3
此查询必须从tableB中收集所有不存在代码且到期日期小于参数传递日期的项目
query_for_delete_codes = "
SELECT expires_at, code FROM tableA
LEFT JOIN tableB ON code = tableB.created_code
WHERE NOT EXISTS(
SELECT 1 FROM tableB WHERE tableB.created_code = code
)
AND expires_at < '#date_limit'
"
【问题讨论】:
你能用find_by_sql
吗?
【参考方案1】:
我不知道你的模型名称,所以我将模型命名为 tableA A 和 tableB B。也许这样的东西对你有用:
class A < ApplicationRecord
has_many :bs, foreign_key: :created_code, primary_key: 'code'
end
class B < ApplicationRecord
belongs_to :a, foreign_key: :code, primary_key: 'created_code'
end
A.select(:expires_at, :code)
.left_joins(:bs)
.where.not(bs: created_code: code )
.where('expires_at < ?', date_limit)
【讨论】:
以上是关于如何将sql中的查询转换为rails中的查询的主要内容,如果未能解决你的问题,请参考以下文章
Rails:将复杂的 SQL 查询转换为 Arel 或 ActiveRecord
如何将以下 linq 查询转换为 SQL 中的 (Having)
将SQL查询转换为具有多对多关系的Rails查询,最佳实践是什么?
如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物