У меня есть модель Person
в рельсах, которая связана с ней:
class Person < ApplicationRecord
has_many :children,
class_name: "Person",
foreign_key: :person_id
belongs_to :mother,
class_name: "Person",
foreign_key: :person_id
end
У людей также есть атрибут age
, представляющий их возраст в годах.Я бы хотел, чтобы запрос ActiveRecord или SQL обнаруживал всех людей с несоответствиями возраста ребенка и матери, которые превышают или равны 50 годам.
(Название модели здесь не совсем то, что я действительно использую вмое приложение. Я переименовал его, чтобы упростить описание проблемы. Однако для моего фактического запроса мне нужно будет знать, если абсолютное значение *1009* разницы в возрасте больше или равно 50 годам. Очевидно, что дети могут 'не может быть старше их матерей, поэтому аналогия там не держится.)
Я пробовал следующие и несколько вариантов, которые все рушатся:
Person
.includes(:mother)
.where("ABS(persons.age - (SELECT age FROM persons WHERE (id = persons.person_id))) >= 50")
Этот, в частности, приводит кс подсказкой:
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
Сначала я подумал, что, возможно, последнее предложение SQL-запроса where
возвращает какой-то список возрастов, а не только возраст матери, поэтому япопытался подписаться с [1]
после него, чтобы получить первый элемент (что должно быть) одного элемента массива (если моя гипотеза была верна).Это было не правильно - ошибка SQL затем обновилась, чтобы сообщить мне, что я не могу подписать что-то, что не является массивом.
Я ищу простейшее решение.Любая помощь приветствуется.Спасибо!