У меня есть отношения has_many
и belongs_to
в одной и той же модели.
Из принадлежащих объекту Rails генерирует неправильный SQL для поиска родителя.
Моя модельследующим образом:
class Variant < ApplicationRecord
enum kind: %i[main sized]
has_many :sized_variants, -> { where kind: 'sized' }, :class_name => "Variant", :dependent => :destroy, :foreign_key => "parent_id"
belongs_to :main_variant, -> { where kind: 'main' }, :class_name => "Variant", optional: true, :foreign_key => "parent_id"
after_create :validate_main_variant
def validate_main_variant
if sized? && self.main_variant.nil?
errors.add(:variant, 'main variant not found')
throw :abort
end
end
В after_create
размерного варианта при вызове self.main_variant
Rails генерирует приведенный ниже SQL для поиска main_variant
(внешний ключ parent_id) вместо простого поиска по parent_id.
В чем здесь ошибка или возможное решение?
Variant Load (1.2ms)
SELECT "variants".*
FROM "variants"
WHERE "variants"."product_id" = $1
AND "variants"."color_id" = $2
AND "variants"."size_id" = $3
AND "variants"."parent_id" = $4
AND "variants"."id" = $5
AND "variants"."kind" = $6
LIMIT $7
[["product_id", 20], ["color_id", 1], ["size_id", 1], ["parent_id", 44], ["id", 44], ["kind", 0], ["LIMIT", 1]]
Я использую Rails 5.1.6.