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"
任何想法如何解決這個問題?