Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 扩展选择而不删除默认值`*`_Ruby On Rails_Ruby_Scope_Rails Activerecord - Fatal编程技术网

Ruby on rails 扩展选择而不删除默认值`*`

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)

我正在开发一个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(: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,“*”)