Обновленный до Rails 4 и .select возвращает первичный ключ, несмотря на то, что не запрашивал его - PullRequest
0 голосов
/ 14 июня 2019

Я нахожусь в процессе обновления приложения с 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, так что это тоже странно.

...