diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c07694..9099c0d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,6 @@ class ApplicationController < ActionController::Base + + include SessionsHelper + protect_from_forgery with: :exception end diff --git a/app/controllers/rides_controller.rb b/app/controllers/rides_controller.rb index 3af4bab..41fcf12 100644 --- a/app/controllers/rides_controller.rb +++ b/app/controllers/rides_controller.rb @@ -14,6 +14,7 @@ def new end def create + @ride = Ride.new(ride_params) if @ride.save respond_to do |format| format.html { redirect_to ride_path(@ride) } @@ -39,17 +40,34 @@ def edit end def update + if @ride.add_passenger(current_user) + respond_to do |format| + format.html { redirect_to ride_path(@ride) } + format.json { render json: @ride } + end + else + flash[:alert] = "Unable to join the ride because it is full" + respond_to do |format| + format.html { redirect_to ride_path(@ride) } + format.json { render json: @ride } + end + end end def destroy end private - def set_user + def set_ride @ride = Ride.find(params[:id]) end def ride_params - params.require(:ride).permit(:max_seats, :max_range, :start_point, :end_point, :start_time, :driver_id) + params.require(:ride).permit(:max_seats, + :max_range, + :start_point, + :end_point, + :start_time, + :driver_id) end end diff --git a/app/models/ride.rb b/app/models/ride.rb index 7c184ad..d48149e 100644 --- a/app/models/ride.rb +++ b/app/models/ride.rb @@ -2,4 +2,17 @@ class Ride < ApplicationRecord belongs_to :driver, class_name: :User, dependent: :destroy has_many :passenger_rides has_many :passengers, through: :passenger_rides + + def add_passenger(new_passenger) + if !self.is_full? + self.passengers << new_passenger + true + else + false + end + end + + def is_full? + self.passengers.count == self.max_seats ? true : nil + end end diff --git a/app/views/rides/show.html.haml b/app/views/rides/show.html.haml index 8ffc4e5..27700ae 100644 --- a/app/views/rides/show.html.haml +++ b/app/views/rides/show.html.haml @@ -1,3 +1,13 @@ %h1 Your Ride -= @ride.end_point + += "Driver: #{@ride.driver.first_name}" +%br += "Destination: #{@ride.end_point}" +%br += "Seats avaialable: #{@ride.passengers.count}/#{@ride.max_seats}" +%br += link_to(@ride, {}, {method: :put}) +%br +- if flash[:alert] + = flash[:alert]