我知道这两个语句执行相同的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 在评论中指出的那样,它们(
select
和pluck
)都执行相同的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/