As I set out on Phase 2 at Flatiron, I knew that my next project would be even more complex than my CLI project.
MVC.. Models, Views, and Controllers, all moving parts of an intricate machine. To put it bluntly, I did struggle with concepts and how each gear moved with one another, but I never gave up. I marched on through lab after lab to get to my Sinatra Project which proved to test me in multiple ways, however I learned much more about programming and also much more about myself.
My MVC was based around the career I love, making coffee. Each day I go to work doing what I love, making morning fuel for every day people, I take pride in my work and even more so when I come up with a drink that everyone loves. This inspired me to create an app that will allow user's to view already created drinks by a pro or the user can create a drink on their own and use it for a future order!
To make this application work, structure is the most important thing:
-
app
- controllers
- application_controller.rb
- users_controller.rb
- drinks_controller.rb
- models
- users.rb
- drinks.rb
- views
- users
- signup.erb
- login.erb
- account.rb
- drinks
- create_drink.erb
- index.erb
- show.erb
- edit.erb
- welcome.erb
- layout.erb
- users
- public
- css
- images
- controllers
First created the models: user and drinks
user has_secure_password
user has_many :drinks
drinks belong_to :user
Now for controllers, User can login, or signup, or logout.
get '/signup' do
if logged_in?
redirect to "/users/#{@user.slug}"
else
erb :'users/signup'
end
end
get '/login' do
if logged_in?
user = User.find_by(id: session[:user_id])
redirect to "users/#{user.slug}"
else
erb :'users/login'
end
end
get '/logout' do
if_not_logged_in
session.clear
redirect to '/'
end
Drinks controller can create drink, edit, or delete a users drink.
get '/drink/new' do
if logged_in?
erb :'drinks/create_drink'
else
redirect '/login'
end
end
patch '/drinks/:id' do
@drink = Drink.find_by_id(params[:id])
if params.empty?
redirect "/drinks/#{@drink.id}/edit"
elsif logged_in? && !params.empty? && current_user.drinks.include?(@drink)
@drink.update(name: params[:name], size: params[:size], flavor: params[:flavor], milk: params[:milk], toppings: params[:toppings], details: params[:details], user_id: params[:id])
redirect "/drinks/#{@drink.id}"
else
redirect '/login'
end
end
delete '/drinks/:id' do
@drink = Drink.find_by(id: params[:id])
@drink.destroy
redirect '/drinks'
end
With controllers set in place, our views come along with it.
A user can sign in with a user name and password or login. Then, redirect to their account.
A user's drinks can be created, edited, and deleted.
All files end up compiled together to create a working app,
of course with CSS to make it aesthetically pleasing!
The whole process of project planning, creating, testing, and debugging was a long road, but at the end of the day I'm grateful to have made such a project and be able to call it my own.
Top comments (0)