It’s hard to overstate how pleasant the framework is to work with. The complete separation of concerns and unobscure syntax makes the experience almost like writing poetry. From controller to model to view.

The most memorable aspect of the project was giving a user the ability to upload their own images for their products. The two obvious options were utilizing purely ActiveStorage or CarrierWave. Working directly with ActiveStorage was giving me all kinds of issues, so I decided to ahead with CarrierWave, which worked like magic until… it came time to retrieve the images from local storage.

A method dedicated entirely to parsing through a string of obtruded image path locations

The results, however, were very worth it with a neat to scroll through multiple images attributed to a single record.

Flipping through images belonging to an item

Aside from that, figuring the best ways to structure the database as well as create the optimum tables and joint tables was a very interesting and rewarding experience. There were two joint tables where it seemed like the best option to attach an attribute to the joint table. One of them being the join table that relates a cart to an item, where the quantity was the attached attribute. The other was the ratings table, which held the rating score that belongs to both a user and an item the user left a rating on.

All in all, it was very challenging and rewarding to see your vision come to life a bug at a time. Especially working with a full-fledged framework that abstracts everything but the actual process of building away.