У меня есть приложение Rails4 со следующими моделями:Получить список полиморфных отношений в Rails 4
1. Systems (has many devices, has many parameters through devices)
2. Devices (belongs to a system, has many parameters)
3. Parameters (belongs to a Device)
4. Events (polymorphic - Systems, Devices and Parameters can have events)
Когда создается событие, булево поле (по событию) присваивается значение. False указывает на сбой.
У меня есть рамки на моих событий, чтобы показывать только провал событий:
scope :failing, -> { where(okay: false).order('created_at desc') }
Я могу получить события следующим образом:
System.events.failing
Device.events.failing
Parameter.events.failing
Я пытаюсь вернуть список систем, где либо :
1. the most recent event for the system has failed
2. the most recent event for any of it's devices has failed
3. the most recent event for any parameters of it's devices have failed
Я написал этот (ужасный) SQL-запрос, который при выполнении в консоли возвращает систему мс как массив:
"SELECT * FROM Systems WHERE Systems.id IN (SELECT Devices.system_id FROM Devices WHERE Devices.id IN (SELECT Parameters.device_id FROM Parameters JOIN EVENTS ON Parameters.id=Events.eventable_id WHERE Events.okay ='f')) OR Systems.id IN (SELECT Devices.system_id FROM Devices JOIN Events ON Devices.id=Events.eventable_id WHERE Events.okay='f')")
мне нужно либо определить область на модели системы или методу класса возвращает список «неудовлетворительные» систем. Вы можете помочь?
Возможно, вы захотите посмотреть ответ @ jearlu. Это избавит вас от ненужных и неэффективных «соединений». – nicooga