我知道这两个语句执行相同的SQL:

使用select

User.select(:email)
# SELECT  `users`.`email` FROM `users`

并使用pluck
User.all.pluck(:email)
# SELECT `users`.`email` FROM `users`

现在,我需要获取从每个方法派生的SQL语句。鉴于select方法返回了ActiveRecord::Relation,我可以调用to_sql方法。但是,考虑到结果是一个数组,我无法弄清楚如何从对ActiveRecord::Relation对象的插拔操作派生的SQL语句。

请考虑到这是问题的简化。抽取的属性数量可以任意多。

任何帮助,将不胜感激。

最佳答案

无法使用to_sql进行pluck的编码,因为不返回 ActiveRecord::relation。如果您尝试这样做,则会引发类似这样的异常

NoMethodError: undefined method `to_sql' for [[""]]:Array



好吧,正如 @cschroed 在评论中指出的那样,它们(selectpluck)都执行相同的SQL查询。唯一的区别是pluck返回的是array而不是ActiveRecord::Relation无关紧要,您要尝试使用多少个属性,SQL语句将与select相同

示例:
User.select(:first_name,:email)
#=> SELECT "users"."first_name", "users"."email" FROM "users"
pluck也一样
User.all.pluck(:first_name,:email)
#=> SELECT "users"."first_name", "users"."email" FROM "users"

因此,您只需要接受select返回的SQL语句,并认为pluck相同。就是这样!

关于ruby-on-rails - ActiveRecord选择使用SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45926450/

10-11 12:42
查看更多