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>')
我正在构建一个相当复杂的查询,我想尽可能坚持使用活动记录方法(因为模型中有很多可选范围可以稍后添加)。
当前代码:
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>')