Bus*_*ler 11 activerecord ruby-on-rails rails-activerecord
我知道这两个语句执行相同的SQL:
运用 select
User.select(:email)
# SELECT `users`.`email` FROM `users`
Run Code Online (Sandbox Code Playgroud)
并使用 pluck
User.all.pluck(:email)
# SELECT `users`.`email` FROM `users`
Run Code Online (Sandbox Code Playgroud)
现在我需要获取从每个方法派生的SQL语句.鉴于该select
方法返回一个ActiveRecord::Relation
,我可以调用该to_sql
方法.但是,我无法弄清楚如何获取从ActiveRecord::Relation
对象的pluck操作派生的SQL语句,因为结果是一个数组.
请考虑到这是问题的简化.拔出的属性数量可以任意高.
任何帮助,将不胜感激.
Pav*_*van 10
你不能链接to_sql
,pluck
因为它不会返回 ActiveRecord::relation
.如果你尝试这样做,它会抛出一个异常
NoMethodError: undefined method `to_sql' for [[""]]:Array
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在ActiveRecord :: Relation对象上获取从pluck操作派生的SQL语句,因为结果是一个数组.
好吧,正如@cschroed在评论中指出的那样,他们(select
和pluck
)都执行相同的SQL查询.唯一的区别是pluck
返回array
而不是ActiveRecord::Relation
.这不要紧,你想有多少属性采摘,SQL语句将同select
例:
User.select(:first_name,:email)
#=> SELECT "users"."first_name", "users"."email" FROM "users"
Run Code Online (Sandbox Code Playgroud)
同为pluck
太
User.all.pluck(:first_name,:email)
#=> SELECT "users"."first_name", "users"."email" FROM "users"
Run Code Online (Sandbox Code Playgroud)
所以,你只需要获取由select
它返回的SQL语句,并相信它是相同的pluck
.而已!
归档时间: |
|
查看次数: |
973 次 |
最近记录: |