Ahhhh- pizza! The combination of flavors and textures makes it the perfect comfort food. I must have been craving some because when it was time to choose a meaningful idea for a Collection Management System project, the choice was obvious- I would create an app using MVC and Sinatra ActiveRecord with full CRUD capabilities that would allow a user to create, read, update, and delete pizzas.
How exciting! This was where I could put everything that I have learned so far into action. Although I would love to discuss every detail of this project since I had so much fun working on it, for the sake of time I will just highlight a few things I found to be notable.
To start, I was delighted to hear about a gem called Corneal that would help me get this project going. Until this point, I had been building everything from scratch. It was really cool that when I initialized this project, Corneal took care of the basic scaffolding for my app. And since the general framework was already created, I was really able to focus on actualizing all of the ideas that I had swirling inside my imagination.
As I was building this basic project, it was impressive that the Models are quite bare with the exception of inheriting from ActiveRecord::Base and the presence of a few powerful macros. The has_many and belongs_to relationships are established here, allowing for associations between users and pizzas as well as many methods made available through ActiveRecord. I used bcrypt for password encryption, so the has_secure_password macro was also included in my User class.
In this project, I used:
.create to create a user or a pizza
.find_by_id and .all to read users or pizzas
.update to update a pizza
.destroy to delete a pizza
Stretch goal: add .update and .destroy functionality to User
It was helpful to keep in mind the flow of a Sinatra request and RESTful convention as I was building the routes within the Controllers.
Building out the Views was quite interesting- I think .erb is really neat and I have very little HTML and CSS experience. This is an area that I used up a lot of time playing around with small visual and functional details. Also, I did run into an issue regarding the use of a textarea tag vs an input tag with type="text" inside the form used to create a pizza. In the case of the input tag, the data entered by the user will populate into the form shown via the '/pizzas/edit' route, but the data within the textarea doesn't without the use of additional code. Any ideas?
Stretch goal: figure out how to get user data from textarea
Here is a look at the home page as shown when a User is logged in. The top nav bar is not shown if user not valid or logged in.
To achieve that, I wrapped the nav bar code with the following inside the layout.erb file:
<% if Helpers.logged_in?(session) %/> #html code for the nav bar <% end %>
and the following inside the helpers.rb file:
def self.logged_in?(session) !!session[:user_id] end
Stretch goal: add full functionality for Ingredient MVC
The code below was placed inside the User model to validate the presence of and uniqueness of both the User's user name and email:
validates :user_name, presence: true, uniqueness: true validates :email, presence: true, uniqueness: true
This project is still under construction, even though at this point I have covered the basic requirements. A User can sign up, login, create, read, update, and destroy pizzas. A User must have a unique username and email, and can only update and destroy pizzas that belong to that User.
Stretch goal: improve styling and overall user experience
Stay tuned for more updates as they happen!
Photo by pixaio from FreeImages
Claim your page on DEV before someone else does
Level up every day