I think I understand what you want now, this is a clean up of what you did
but I dont think is what you want

def create
  @appointment = Appointment.where("date = ? && timeslot = ?",
date,timeslot).first_or_initialize

  respond_to do |format|
    if @appointment.new_record? # this means you did NOT found an
Appointment for the given date and timeslot
      format.html { redirect_to new_appointment_path, notice:
'Appointment was successfully created.' }
      format.json { render :show, status: :created, location:
@appointment }
    else # this means you did found an Appointment for the given date and
timeslot
      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

 now keep in mind that you are doing it wrong, 'create action' it for
creating, what you need is
 a contitional link that leads to either new or index action and leave
create alone doing only what
 it should. So can you explain your goal as a user story, so that I can
guide you to do it properly ?


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/CANkJ5gnLruYMY5CF1Z0yxY5Hn0Mk-ma6EBneUskbKT6SNQZK8g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to