Я действительно не вижу ничего плохого в вашем коде. Хотя есть несколько способов выполнить то, что вы, похоже, пытаетесь сделать, ваш метод, похоже, должен работать нормально (хотя у меня ограниченный опыт работы с Arel).
Другим способом решения этой проблемы может быть простое изменение метода interest_level
:
def interest_level
self.votes.count - self.no_votes.count * 2 # same as (total - no_votes) - no_votes
end
Вышеуказанное может быть немного быстрее, хотя я сильно сомневаюсь, что это будет иметь большое значение, запросы подсчета выполняются довольно быстро по индексированным столбцам, и вашу версию этого метода легче читать