Я нахожусь в процессе обновления приложения с Rails 3 до Rails 4. Следующее утверждение возвращает дополнительный столбец (первичный ключ), и я не уверен почему, и я считаю, что именно поэтому, когда ядобавив .count
в конец, я получаю синтаксическую ошибку SQL.
Запрос, о котором идет речь:
Review.where(id: ids).select([:variant_id, :rating_value]).
group(:variant_id, :rating_value)
В Rails 3 я получаю:
[#<Review variant_id: 1037, rating_value: 1>,
#<Review variant_id: 28221, rating_value: 4>]
И затем, если я добавлю .count
, я получу:
{[1037, 1]=>1, [28221, 4]=>1}
Под Rails 4, однако, я получаю это:
#<ActiveRecord::Relation [#<Review id: nil, variant_id: 4, rating_value: 3>,
#<Review id: nil, variant_id: 5, rating_value: 3>]>
Возвращается столбец id
хотя я не выбрал для этого.И когда я добавляю .count
, я получаю эту ошибку:
ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax
to use near ' rating_value) AS count_variant_id_rating_value, `reviews`.`variant_id`
AS revie' at line 1: SELECT COUNT(variant_id, rating_value) AS
count_variant_id_rating_value, `reviews`.`variant_id` AS reviews_variant_id,
`reviews`.`rating_value` AS reviews_rating_value FROM `reviews` WHERE `reviews`.`id`
IN (1, 2) GROUP BY `reviews`.`variant_id`, `reviews`.`rating_value`
Кажется, что это конфликтует с https://guides.rubyonrails.org/v4.1/active_record_querying.html, в разделе «Выбор определенных полей», поэтому я очень запутался.Кроме того, id в этих записях не равен nil, так что это тоже странно.