Select * 而不是 table.* 来自活动记录查询

Select * instead of table.* from active record queries

我正在构建一个相当复杂的查询,我想尽可能坚持使用活动记录方法(因为模型中有很多可选范围可以稍后添加)。

当前代码:

join_sql = "INNER JOIN(SELECT username, user_id FROM external_credentials UNION SELECT username, user_id FROM internal_credentials) ON id = user_id"

User.joins(join_sql)

这会产生以下结果 SQL:

SELECT  "USERS".* FROM "USERS" INNER JOIN(SELECT username, user_id FROM external_credentials UNION SELECT username, user_id FROM internal_credentials) ON id = user_id FETCH FIRST :a1 ROWS ONLY  [["LIMIT", 11]]

问题是它选择了 "USERS".* 而不是 *,所以我无法使用我要加入的额外字段。我如何告诉 ActiveRecord 也接受连接的所有字段?

SELECT "USERS".* 是在 ApplicationRecord 对象中调用 joins(或其他一些方法)的结果。当未明确告知从 table 到 select 的列时,它将获取所访问模型所属的 table 中的所有列。

您可以通过覆盖 select 语句来修改它们:

User.joins(join_sql).select('<whatever you need here>')