gpt4 book ai didi

ruby-on-rails - 在不删除默认值 `*` 的情况下扩展 SELECT

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:17 25 4
gpt4 key购买 nike

我正在开发一个 gem,它公开了带有计算列的范围。实现并不重要,我可以用简单的例子来说明我的问题。

查询的默认选择*:

User.unscoped.to_sql
# => SELECT "users".* FROM "users"

但是,一旦完成显式选择,此默认值就会被覆盖:

User.select(:created_at).to_sql
# => SELECT created_at FROM "users"

后续调用是累积的:

User.select(:created_at).select(:created_at).to_sql
# => SELECT created_at, updated_at FROM "users"

这是答题器:我想向 SELECT 子句添加一列,但是,必须保留默认值。如果存在显式的 select,这会很好地工作:

User.select(:created_at).compute_some_column.to_sql
# => SELECT created_at, "users"."some_column" FROM "users"

但是如果没有显式的 select 存在,那么除了计算列你什么也得不到:

User.compute_some_column.to_sql
# => SELECT "users"."some_column" FROM "users"

好吧,我总是可以在我的 compute_some_column 范围内包含 *,但这将是一个丑陋的 hack,可能会导致列被多次提取:

User.compute_some_column.compute_another_column.to_sql
# => SELECT "users".*, "users"."some_column", "users".*, "users"."another_column" FROM "users"

有什么解决办法吗?

最佳答案

您可以像这样将 sql 字符串传递到 select 方法中:User.select(:id,'*')

关于ruby-on-rails - 在不删除默认值 `*` 的情况下扩展 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471531/

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