В моей заявке Annotations
считаются принятыми, если либо :
- Они были явно помечены как «принятые» (то есть их состояние == «принято»)
- Они были последний раз обновлены пользователем с ролью "редактора"
Мой вопрос - как найти все принятые объяснения с помощью одного запроса к БД. В основном я ищу управляемую базой данных версию
Annotation.all.select do |a|
a.last_updated_by.roles.map(&:name).include?('editor') or a.state == 'accepted'
end
Моя первая попытка была
Annotation.all(:joins => {:last_updated_by => :roles}, :conditions => ['roles.name = ? or annotations.state = ?', 'editor', 'accepted'])
Но это возвращает кучу дубликатов записей (хотя добавление .uniq
заставляет его работать)
Изменение :joins
на :include
работает, но это делает запрос слишком медленным