Это на самом деле не отвечает на ваш вопрос, но все же может быть полезно, если нет способа определить, является ли метод областью или нет:
Вы можете проверить полученный SQL
eval("#{params[:model]}.#{params[:scope]}.to_sql")
и проверьте наличие опасных вызовов SQL (DELETE, TRUNCATE, UPDATE, INSERT).
EDIT:
Вы также можете проверить, что область, которую вы вызываете в вашей модели, определена вэта модель, а не в родительском классе, как ActiveRecord :: Base.
model.method(scope.to_sym).owner == model
РЕДАКТИРОВАТЬ 2:
Вы также можете вызвать область на пустом наборе записей, и проверить классрезультата.Для области видимости это будет ActiveRecord :: Relation, но для delete_all это будет Fixnum:
model.where('0').scope.class == ActiveRecord::Relation