Когда я 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
... что на самом деле то, что я копировать/вставить из запроса, генерируемого Task.joins(:recurrence).group('recurrences.id').pluck('tasks.title')
без to_sql
.
Можно ли делать то, что я хочу делать?
Стоит упомянуть, что это потому, что 'pluck' является нетерпеливым методом (как' find'), он немедленно переходит к базе данных и возвращает массив результатов. Документы [здесь] (http://guides.rubyonrails.org/active_record_querying.html#pluck) и [здесь] (http://edgeapi.rubyonrails.org/classes/Enumerable.html#method-i-pluck) –