2016-09-30 58 views
1

當我到to_sql以下查詢正常工作:to_sql不起作用

2.1.8 :017 > Task.joins(:recurrence).group('recurrences.id').to_sql 
=> "SELECT `tasks`.* FROM `tasks` INNER JOIN `recurrences` ON `recurrences`.`id` = `tasks`.`recurrence_id` GROUP BY recurrences.id" 

但後來當我添加pluck這是行不通的:

2.1.8 :018 > Task.joins(:recurrence).group('recurrences.id').pluck('tasks.title').to_sql 
    (21.0ms) SELECT tasks.title FROM `tasks` INNER JOIN `recurrences` ON `recurrences`.`id` = `tasks`.`recurrence_id` GROUP BY recurrences.id 
NoMethodError: undefined method `to_sql' for #<Array:0x007fbde9863f18> 

顯然,pluck的添加將對象的類型從ActiveRecord_Relation更改爲Array,並且您顯然無法在陣列上執行to_sql

什麼我也想輸出(對於初學者)是這樣的:

SELECT tasks.title FROM `tasks` INNER JOIN `recurrences` ON `recurrences`.`id` = `tasks`.`recurrence_id` GROUP BY recurrences.id 

...這實際上是我複製/不通過to_sql產生Task.joins(:recurrence).group('recurrences.id').pluck('tasks.title')查詢粘貼。

是否有可能做我想做的事情?

回答

2

我想通了。我必須使用select

> Task.select('tasks.title').joins(:recurrence).group('recurrences.id').to_sql 
=> "SELECT tasks.title FROM `tasks` INNER JOIN `recurrences` ON `recurrences`.`id` = `tasks`.`recurrence_id` GROUP BY recurrences.id" 
+1

實在值得提及的是,因爲'pluck'是一個熱心方法(如'find'),它立即轉移到數據庫,並返回結果的數組。 Docs [here](http://guides.rubyonrails.org/active_record_querying.html#pluck)和[here](http://edgeapi.rubyonrails.org/classes/Enumerable.html#method-i-pluck) –