JACOB SILVER

web developer | musician | venue booker

Rails Portfolio Project

# Rails Final Project

Working on this project was by far the biggest challenge I've worked on since enrolling at the Flatiron School.  It took me about two weeks and probably around 30-40 hours to complete, and I still feel like there's lots more work to be done.  There were many features I had hoped to put into this project that I eventually had to scrap, mostly because in the end I decided it was more important to submit something that works instead of working for 2 months on something that might work, might not!  Plus, even at the state that it is at, I do believe it satisfies the requirements of the project.

The app has 3 models, plus one more which operates as the join table via a has many through association.  The three models are User, Show, and Act.  The join model is called ActShow.  The User has many shows, the Show has many Acts through the ActShow, and the Act has many Shows through the ActShow.

Upon successful login (via a local login system or Facebook), the user is given the option of creating a new show.  Once that new show is created, the user can create acts which will be added to the newly created show.  Validations ensure that there aren't two shows on the same date, or that an act is created without a name or contact email address.  The user can add as many acts as they wish to the show.  From there, the user can edit the acts (including selecting an act to be the "headliner", which is an attribute residing on the join model), delete acts, or even delete the show entirely, which also deletes the associated acts.  

There are two additional views which allow the user to view either today's show, or all the shows occurring this week.

# Issues
The main issue I faced was dealing with acts.  I was hoping to have the option of adding an already-created act (in a different show), to a new show, but eventually had to scrap this feature after many, many hours of coding, and more than a few sessions with instructors, which led nowhere.  In a real booking application, this would be a necessary feature which I hope to one day learn how to implement properly.
Another issue I faced was with validations.  I attempted to enforce much stricter validations, but was met with mismatched join-table records, params not passing, and other frustrations which ultimately led me to stick with a lighter validation system.  Again, this is something I really hope to one day get a much better grasp on.

# Conclusion
All in all, this was incredibly rewarding, but was equally frustrating, for every time I fixed one thing, it broke 10 other things.  I guess that's part of programming!  I can say that I learned TONS about Rails in this process, and can't wait to jump back in and do more projects.