// the find
davidcelis/recommendable
:+1::-1: A recommendation engine using Likes and Dislikes for your Ruby app
Recommendable is a Ruby gem that adds user-based collaborative filtering to Rails apps using binary like/dislike signals instead of star ratings. It stores all ratings in Redis and uses Jaccard similarity to find similar users, then generates ranked recommendation lists per user. Aimed at small-to-medium Rails apps that want recommendations without standing up a separate ML service.
The binary signal design is genuinely better than star ratings for collaborative filtering — Jaccard similarity on likes/dislikes produces cleaner neighbor graphs than cosine similarity on noisy 1-5 stars. Redis set operations (SINTERSTORE, SUNIONSTORE) make the overlap calculations fast without custom code. The ORM abstraction is real — it supports ActiveRecord, Sequel, DataMapper, Mongoid, and MongoMapper with a consistent interface. The `recommends :movies, :books` DSL is about as low-friction as this kind of integration gets.
The project is effectively dead — last commit April 2018, references Ruby 1.9.3 as minimum, Gemfiles only test against Rails 4 and 5, and the dependency badges link to services (Gemnasium, Gittip) that no longer exist. All ratings are stored permanently in Redis with no TTL or pruning mechanism, so memory grows without bound as your catalog and user base scale. The README admits only one model can receive recommendations at a time, which rules out most real product needs. Memory-based k-NN collaborative filtering is O(n²) in users — this approach falls over before you hit serious scale, and there is no path to model-based or approximate methods.