2
我正在研究一个gem,它提供了计算列的作用域。实现并不重要,我可以用简单的例子来说明我的问题。扩展SELECT而不删除默认`*`
查询的默认select
为*
:
User.unscoped.to_sql
# => SELECT "users".* FROM "users"
然而,一旦明确select
完成后,此默认被覆盖:
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"
以下是点击者:我'd想向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
范围,但这将是一个丑陋的黑客攻击可能导致列被提取多次:
User.compute_some_column.compute_another_column.to_sql
# => SELECT "users".*, "users"."some_column", "users".*, "users"."another_column" FROM "users"
任何想法如何解决这个问题?