Я уверен, что это можно почистить / реорганизовать, но что-то подобное может сработать.
class Notification
scope :on_post_or_its_comments, lambda {|post|
on_post = arel_table[:notifiable_type].eq('Post').
and(arel_table[:notifiable_id].eq(post.id))
posts_comments = arel_table[:notifiable_type].eq('Comment').
and(arel_table[:notifiable_id].in(post.comments.map(&:id))
where on_post.or(posts_comments)
}
end
Проблема в том, что (последний раз я проверял) нет способа объединить условия OR в реализацию ActiveRecord для Arel.Более того, вы не можете |
области (но вы можете &
их).
Есть написанные пользователями гемы, которые позволят вам писать более выразительные запросы ActiveRecord. Metawhere - первое, что приходит на ум.