Как написать именованную область для аудитов, у которой нет объектов аудита?

Я использую Audit gem в своем приложении Ruby on Rails. Я использовал полиморфную связь между Audits и моим Orders.

Теперь я хочу написать именованную область, чтобы получать только те аудиты, для которых заказ не удален (это происходит потому, что заказ удаляется после создания аудита.

<Audit id:110,
auditable_id:4,
auditable_type:"Order",
user_id:1,
user_type:"User",
username:nil,
action:"create",
created_at:"2018-04-07 09:06:20">,
#<Audit id:49,
auditable_id:3,
auditable_type:"Order",
user_id:3,
user_type:"User",
username:nil,
action:"create",
created_at:"2018-04-06 12:28:41">

Теперь, когда я ввожу Audit.first.auditable в свою консоль, я получаю ноль, поскольку порядок, соответствующий этому аудиту, удален, а когда я ввожу Audit.second.auditable, я получаю заказ, соответствующий второму аудиту.

Я хочу отфильтровать свой аудит, чтобы аудит типа, в котором удален заказ, был удален (например, Audit.first)


person Umesh Malhotra    schedule 09.04.2018    source источник
comment
I want to write a named scope to get only those Audits for which Order is not nil . Вы имеете в виду, что вместо nil ордер не удаляется?   -  person Ganesh    schedule 09.04.2018
comment
Да я имею ввиду заказ не удаляется   -  person Umesh Malhotra    schedule 09.04.2018
comment
Здесь должно быть так же просто, как выполнить внутреннее соединение.   -  person Sergio Tulentsev    schedule 09.04.2018


Ответы (1)


Сделать это можно так:

Audit.rb

scope :with_active_orders, -> { joins(:order) }

Что вернет Audits, если есть хотя бы один Order.

person ActiveModel_Dirty    schedule 09.04.2018
comment
Вы имеете в виду область действия: with_active_orders, - ›{joins (: orders)}? Тогда также я получаю сообщение об ошибке - ActiveRecord :: ConfigurationError Exception: не удается присоединить «Аудит» к ассоциации с именем «порядок»; возможно, вы написали с ошибкой? - person Umesh Malhotra; 10.04.2018
comment
Да; извиняюсь. Приведенный выше код будет работать, если вы используете default_scope, но для обычной области видимости он должен быть таким, как у вас. Ошибка, которую вы получите, зависит от того, как вы определили свою ассоциацию. Попробуйте order единственное число вместо orders множественного числа. - person ActiveModel_Dirty; 10.04.2018