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

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

How did you setup your model relationship between users and appointments

On Thu, Jul 7, 2016 at 1:42 PM, Ruth S. [email protected]

%>
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 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 D. wrote in post #1184502:

%>
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

Ruth S. 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 S. wrote in post #1184507:

Ruth S. 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.

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.

Note that this schema.rb definition is the authoritative source for

your

database schema. If you need to create the application database on

another

system, you should be using db:schema:load, not running all the

migrations

from scratch. The latter is a flawed and unsustainable approach (the

more migrations

you’ll amass, the slower it’ll run and the greater likelihood for

issues).

It’s strongly recommended that you check this file into your version

control system.

ActiveRecord::Schema.define(version: 20160705200326) do

create_table “appointments”, force: :cascade do |t|
t.string “name”
t.string “phone”
t.string “email”
t.integer “numpeople”
t.date “date”
t.string “timeslot”
t.integer “user_id”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

add_index “appointments”, [“user_id”], name:
“index_appointments_on_user_id”

create_table “messages”, force: :cascade do |t|
t.string “name”
t.string “email”
t.string “phone”
t.string “subject”
t.text “body”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

create_table “options”, force: :cascade do |t|
t.decimal “pricePerPerson”
t.integer “discount”
t.integer “appointment_id”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

add_index “options”, [“appointment_id”], name:
“index_options_on_appointment_id”

create_table “profiles”, force: :cascade do |t|
t.string “firstname”
t.string “lastname”
t.text “address”
t.string “email”
t.string “phone”
t.integer “user_id”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

add_index “profiles”, [“user_id”], name: “index_profiles_on_user_id”

create_table “users”, force: :cascade do |t|
t.string “email”, default: “”, null: false
t.string “encrypted_password”, default: “”, null: false
t.string “reset_password_token”
t.datetime “reset_password_sent_at”
t.datetime “remember_created_at”
t.integer “sign_in_count”, default: 0, null: false
t.datetime “current_sign_in_at”
t.datetime “last_sign_in_at”
t.string “current_sign_in_ip”
t.string “last_sign_in_ip”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

add_index “users”, [“email”], name: “index_users_on_email”, unique:
true
add_index “users”, [“reset_password_token”], name:
“index_users_on_reset_password_token”, unique: true

end

Emmanuel Abia wrote in post #1184506:

How did you setup your model relationship between users and appointments

On Thu, Jul 7, 2016 at 1:42 PM, Ruth S. [email protected]

Emmanuel Abia wrote in post #1184510:

Ok…try current_user.appointments.last.id

Error:
undefined method `id’ for nil:NilClass

Ok…try current_user.appointments.last.id

Ruth S. 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 S. wrote in post #1184507:

Ruth S. 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.