Won't display current_user.appointment

I have a users (Devise) and apointments table. I want to add a link in my application.html.erb to link to that particular user's appointment, so they can have the option to change it. (As a customer).

I have a similar link set up for them to edit their profile.

<%= link_to 'My Appointments', appointment_path(current_user.appointment) if current_user.appointment %>

Profile works: <%= link_to 'My Profile', profile_path(current_user.profile) if current_user.profile %>

However the appointments link won't work. It gives the error: Couldn't find Appointment with 'id'=#<Appointment::ActiveRecord_Associations_CollectionProxy:0x007ffaa5999b28>

Appointment belongs to user user has many appointments profile belongs to user user has one profile

My code is as follows:

def index     @appointments = Appointment.all   end

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

  end

  def new     @appointment = Appointment.new   end

<%= link_to ‘My Appointments’, appointment_path(current_user.appointment) if current_user.appointment %> The problem is current_user.appointment is returing more than one appointments. So if u re concerned about the last ap then do this: current_user.appointment.last

I have a users (Devise) and apointments table. I want to add a link in my application.html.erb to link to that particular user's appointment, so they can have the option to change it. (As a customer).

I have a similar link set up for them to edit their profile.

<%= link_to 'My Appointments', appointment_path(current_user.appointment) if current_user.appointment %>

Profile works: <%= link_to 'My Profile', profile_path(current_user.profile) if current_user.profile %>

However the appointments link won't work. It gives the error: Couldn't find Appointment with 'id'=#<Appointment::ActiveRecord_Associations_CollectionProxy:0x007ffaa5999b28>

Appointment belongs to user user has many appointments

This is why the link doesn't work. A user (current_user) does not have _an_ appointment, she has _many_ appointments. If you want the latest one, then use

current_user.appointments.order(:appointment_date).last if current_user.appointments.any?

You could put that in a helper so it doesn't make your views so ungainly.

Walter

Thanks for your reply. I tried your suggestion but get the same error.

<%= link_to 'My Appointments', appointment_path(current_user.appointment.last) %>

It seems to be in the set_appointment method in the controller

# Use callbacks to share common setup or constraints between actions.     def set_appointment       @appointment = Appointment.find(params[:id])     end

Thanks for your reply. I tried your suggestion but get the same error.

<%= link_to 'My Appointments', appointment_path(current_user.appointment.last) %>

  It seems to be in the set_appointment method in the controller

# Use callbacks to share common setup or constraints between actions.      def set_appointment        @appointment = Appointment.find(params[:id])      end

Thanks for your help, however it wont' work. I put <%= link_to 'My appointment',current_user.appointments.order(:appointment_date).last%> ERROR: SQLite3::SQLException: no such column: appointments.appointment_date: SELECT "appointments".* FROM "appointments" WHERE "appointments"."user_id" = ? ORDER BY "appointments"."appointment_date" DESC LIMIT 1

Walter Davis wrote in post #1184502:

How did you setup your model relationship between users and appointments

Ruth Stephenson wrote in post #1184504:

ERROR: SQLite3::SQLException: no such column: appointments.appointment_date:

This is telling you that there is no appointment_date column in your appointments table.

replace appointment_date with whatever you have named the appointment date column in the appointments table. I think you mentioned it was called date in another post, so:

<%= link_to 'My appointment',current_user.appointments.order(:date).last%>

J.

Unfortunately, I have already tried that. When I click on the link it does nothing. It stays on whatever page i'm on but won't do anything.It's very strange

Johnny Stewart wrote in post #1184507:

User has a one to one relationship with profile user has a one to many relationship with appointment

Someone on this board told me my database is set up badly, but didn't explain. Do you think this is an issue?

# encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition.

Ok…try current_user.appointments.last.id

Emmanuel Abia wrote in post #1184510:

Ok...try current_user.appointments.last.id

Error: undefined method `id' for nil:NilClass

Ruth Stephenson wrote in post #1184508:

Unfortunately, I have already tried that. When I click on the link it does nothing. It stays on whatever page i'm on but won't do anything.It's very strange

Johnny Stewart wrote in post #1184507:

Ruth Stephenson wrote in post #1184504:

ERROR: SQLite3::SQLException: no such column: appointments.appointment_date:

This is telling you that there is no appointment_date column in your appointments table.

replace appointment_date with whatever you have named the appointment date column in the appointments table. I think you mentioned it was called date in another post, so:

<%= link_to 'My appointment',current_user.appointments.order(:date).last%>

J.

This is where you need to be looking around - if it doesn't do anything on clicking then you need to work out why that is (does the current user have any appointments? are you attempting to render this with javascript? does the template exist?).

The errors you are currently coming across are fundamental. I think you need to do as others have suggested and work through a tutorial or preferably 2 or 3, start to finish. When you have done that these errors will be easy to solve.