ActiveRecord采用SQL

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在评论中指出的那样,他们(selectpluck)都执行相同的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.而已!