ActiveRecord count_by_sql вызывает более глубокую магию ActiveRecord :: Base, которая предполагает, что вы являетесь действительным ActiveRecord (то есть чем-то, что наследуется от AR, а не от самого AR) и, таким образом, пытается вызвать внутренний метод с именем abstract_class? который обычно возвращает имя класса (например, Order или Product).
Вы можете обойти это, используя реальный объект AR (неважно, какой), например:
my_count = MyWidget.count_by_sql(["SELECT widgets FROM wodgets WHERE colour = ? LIMIT 1", my_favourite_colour])