У меня есть таблица с именем product_variations
, и эта таблица имеет_many products
.
Когда я go на консоль Rails, я могу сделать это:
2.6.3 :036 > var = ProductVariation.first
ProductVariation Load (0.2ms) SELECT `product_variations`.* FROM `product_variations` ORDER BY `product_variations`.`id` ASC LIMIT 1
=> #<ProductVariation id: 16, product_id: 1024, color_id: 19, quantity: 1, size: "GG", sub_sku: 10, created_at: "2020-02-18 14:41:46", updated_at: "2020-02-18 14:41:46">
2.6.3 :037 > var.size
=> "GG"
Так вот и работает. Но когда я пытаюсь найти что-то там, используя where
, я получаю это целое число:
2.6.3 :038 > var = ProductVariation.where(product_id: 1024, sub_sku: 10)
ProductVariation Load (0.4ms) SELECT `product_variations`.* FROM `product_variations` WHERE `product_variations`.`product_id` = 1024 AND `product_variations`.`sub_sku` = 10 LIMIT 11
=> #<ActiveRecord::Relation [#<ProductVariation id: 16, product_id: 1024, color_id: 19, quantity: 1, size: "GG", sub_sku: 10, created_at: "2020-02-18 14:41:46", updated_at: "2020-02-18 14:41:46">]>
2.6.3 :039 > var.size
(0.2ms) SELECT COUNT(*) FROM `product_variations` WHERE `product_variations`.`product_id` = 1024 AND `product_variations`.`sub_sku` = 10
=> 1
Обратите внимание, что когда я пытаюсь использовать var.size
, консоль выполняет другой поиск в базе данных, но теперь использует SELECT COUNT(*)
вместо SELECT
, а на выходе будет 1
(хотя должно быть GG
, почему?). Насколько я понял до сих пор, where
может вернуть много результатов. Вот почему он использует COUNT
? Но как я могу использовать результат? В этом приложении, над которым я работаю, за таблицей product_variations
у меня будет только одно совпадение с product_id
и sub_sku
, поэтому я хочу, чтобы оно вернуло эту строку, но не могу понять, как использовать where
, чтобы сделать это.