gpt4 book ai didi

ruby-on-rails - 检查 ActiveRecord::Relation 是否已经包含 JOIN

转载 作者:行者123 更新时间:2023-12-04 14:14:10 24 4
gpt4 key购买 nike

我在向我的查询/关系添加过滤器 (user.type) 的方法中。

有时,如果在过滤之前选择按用户分组(需要 INNER 加入到另一个模块中的 users table),我会收到一个错误:
PostgreSQL: PG::DuplicateAlias: ERROR: table name "users" specified more than once
在错误发生之前 JOIN 已经在查询中 -

$ pry> relation.to_sql
SELECT \"posts\".* FROM \"posts\"
INNER JOIN users ON users.id = posts.user_id
WHERE \"posts\".\"created_at\" BETWEEN '2019-05-01 00:00:00'
AND '2020-05-01 23:59:59' AND \"users\".\"type\" = 'Guest'"

我想通过检查表是否已经加入我的 ActiveRecord::Relation 对象来修复它。我补充说:
def join_users
return relation if /JOIN users/.match? relation.to_sql

relation.joins('LEFT JOIN users ON users.id = posts.user_id')
end

这个解决方案有效,但我想知道 - 有没有更好的方法来检查 JOIN 是否存在内部关系?

最佳答案

也许你可以使用 joins_values ,它没有被记录在案,而是一个 ActiveRecord_Relation返回一个数组的公共(public)方法,该数组包含当前查询(对象)构造的表的名称:

Post.joins(:user).joins_values # [:user]
Post.all.joins_values # []

关于ruby-on-rails - 检查 ActiveRecord::Relation 是否已经包含 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62075972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com