Bowls, My Rails Portfolio Project

Posted by Dalma Boros on January 9, 2018

The process of creating my Rails Portfolio project was drawn out and full of mistakes. It started with an idea. I wanted to have a bowl in real life, fill it with scraps of paper, each with an activity written on it. In my downtime I could pull a random scrap from the bowl, and do the activity written on it, filling my free time with productive things. Bowls is a digitized version of that idea.

I find myself making hand-written notes to capture all the pieces of a web app floating around in my brain. There are so many moving parts to a web app that it really helps make space in my mind for next steps in the process. Here is my first note (complete with irrelevant doodles):

For me, the most logical starting point is mapping out the models and their associations. In this case, it’s pretty uncomplicated with only three models: Bowl, Scrap, and User. A User has many Bowls and Scraps. And Bowls and Scraps have a many-to-many relationship with each other, expressed through a Bowl_Scrap model.

Next, I jump right to the views because I want to think about what the app is ultimately going to do and how it’s going to be, and then code the blank inbetween parts. So I made the routes and actions as I went, relying heavily the Rails exceptions the app threw at me along the way.

Again, I made hand-written diagrams to map out how I wanted Bowls to behave:

Once I had all the views and CRUD actions I needed solidified, I made a function that lets you pull a random scrap from a bowl. I also made a scope method that shows you all the scraps that have no bowl. I also implemented OmniAuth with Devise, which was a lot more difficult than I expected, but I managed with a considerable amount of help from Google and Stack Exchange.

The finishing touch was refactoring the code a little bit, and DRYing it up. Then I recorded a video walkthrough showing how to use the app, which actually revealed a bunch of little bugs that needed fixing.

Some things I noticed:

I didn’t implement every feature I wanted (like multi-strategy OmniAuth), because some things were just a little too involved, and I needed to strike a balance between functional enough and spending too much time on functionality that’s not totally crucial.

Next time I would save the styling for the end of the project, once the functionality of the app is finished, because it feels a little too scattered to work on both simultaneously.

I will always always make hand-written notes and diagrams!

This stuff is really hard, and that’s okay!