I have omitted some of the code for brevity

# controller
class AppointmentsController < ApplicationController
  def index
    @appointments = Appointment.all
  end

  def new
    @appointment = Appointment.find(params[:id])
  end

  def create
    @appointment = Appointment.new(appointment_params)

    respond_to do |format|
      if @appointment.save # here is your save
        format.html { redirect_to appointments_path, notice: 'Appointment
created successfuly' }
        format.js   {...} # put your code here
      else
        format.html { render :new }
        format.js   {...}
      end
    end
  end

  # rest of your code below
end

# Model
class Appointment < ActiveRecord::Base
  # this is what the guys meant by "move this to active record validation"
  validates :date, uniqueness: { scope: :timeslot } # this will return a
validation error if an appointment exist with the same date and timeslot
end


Now in the view, the index page should have a table with dates and
timeslots have a look at this railscast to learn how to do that, but note
that the railscast it pretty old,
http://railscasts.com/episodes/213-calendars, still it will help you to
create a calendar, im pretty sure there is also a gem that can do it for
you, but if you are learning the railscast will help you a lot. Then there,
there should be create appointment link inside the free times slot, and
then the appointment title in the timeslots that are already in use, its
all most about the presentation of the index and the calendar, there not
much logic inside create action besides what I have posted here. Dont be
afraid to keep asking, and go into railscast and browse around there are
some pretty good ones there that can help you learn the basics easily.

http://railscasts.com/


On Thu, Jun 30, 2016 at 10:27 AM, Ruth Stephenson <li...@ruby-forum.com>
wrote:

> Hi, I have a very beginners understanding of rails and ruby and I keep
> getting stuck. Some previous posts have helped me a great deal but I now
> have a different issue and so I thought I should start another post with
> a different topic.
>
> I am making an appointment booking app and I have a very basic design. I
> have created an appointments scaffold with name:string phone:string
> email:string numpeople:integer date:date timeslot:string. On the view
> for creating a new appointment I have stated that appointment 1 is
> 9-11am, appointment 2 is 12-2pm, appointment 3 is 3-5pm and appointment
> 4 is 5 - 7pm. The user is asked to enter 1,2,3 or 4.
>
> When the user clicks on "make appointment" I'm trying to interrupt the
> appointments controller (create method)  so that I can check if the date
> && timeslot are nil. if that is the case, the system should continue on
> to create the appointment, if not then I want to redirect to somewhere
> else. I have created a method called isValid? in the model (See below)
>
> I think the method is correct as the system is getting as far as the
> redirect. The problem is, it keeps redirecting to the page I told it to
> go to if it's not saved(the homepage or root_path). (Also the
> appointments are not saving).
>
> So, there now seems to be an issue with saving the appointment data to
> the database.
>
> If anyone could give me some pointers, I would be so, so grateful!
>
> CODE:
>
> appointments Model:
> class Appointment < ActiveRecord::Base
>
>   def isValid?
>     taken= Appointment.where("date = ? && timeslot = ?", date,timeslot)
>      Appointment.save unless taken
>   end
> end
>
>
> appointments controller:
>
> def create
>     valid = @appointment = Appointment.new(appointment_params).isValid?
>
>       respond_to do |format|
>       if valid
>         format.html { redirect_to new_appointment_path, notice:
> 'Appointment was successfully created.' }
>         format.json { render :show, status: :created, location:
> @appointment }
>       else
>         format.html { redirect_to root_path, notice: 'That appointment
> is not available, please choose again' } # this redirect works with no
> notice
>         format.js { render json: @appointment.errors, status:
> :unprocessable_entity }
>       end
>     end
>   end
>
> --
> Posted via http://www.ruby-forum.com/.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-talk+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rubyonrails-talk/48c5adc17a16f1c704752ad165f5c5cd%40ruby-forum.com
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CANkJ5gkxW%2B26d9cdABiTc23hAq%3DPgLeMR9oTEg3gtsOvEGfyRA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to