Ruby on rails 扩展选择而不删除默认值`*`
我正在开发一个gem,它使用计算列公开作用域。实现并不重要,我可以用简单的例子来说明我的问题 查询的默认Ruby on rails 扩展选择而不删除默认值`*`,ruby-on-rails,ruby,scope,rails-activerecord,Ruby On Rails,Ruby,Scope,Rails Activerecord,我正在开发一个gem,它使用计算列公开作用域。实现并不重要,我可以用简单的例子来说明我的问题 查询的默认select为*: User.unscoped.to_sql # => SELECT "users".* FROM "users" 但是,一旦完成显式选择,此默认值将被覆盖: User.select(:created_at).to_sql # => SELECT created_at FROM "users" 后续呼叫是累积的: User.select(:created_at)
select
为*
:
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子句中添加一列,但是,必须保留默认值。如果存在显式的选择
,则此操作正常:
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\u some\u列
范围中包含*
,但这将是一个丑陋的黑客行为,可能会导致多次获取列:
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,“*”)您可以像这样将sql字符串传递到select方法:User.select(:id,“*”)