Won't display current_user.appointment

40 views
Skip to first unread message

Ruth Stephenson

unread,
Jul 7, 2016, 8:14:29 AM7/7/16
to rubyonra...@googlegroups.com
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

--
Posted via http://www.ruby-forum.com/.

Emmanuel Abia

unread,
Jul 7, 2016, 8:21:13 AM7/7/16
to rubyonrails-talk@googlegroups com

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

--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/e5ecd6b53c92eedb2aeded777552ac49%40ruby-forum.com.
For more options, visit https://groups.google.com/d/optout.

Walter Lee Davis

unread,
Jul 7, 2016, 8:33:25 AM7/7/16
to rubyonra...@googlegroups.com

> On Jul 7, 2016, at 8:14 AM, Ruth Stephenson <li...@ruby-forum.com> wrote:
>
> 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

> 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
>
> --
> Posted via http://www.ruby-forum.com/.
>

Ruth Stephenson

unread,
Jul 7, 2016, 8:34:02 AM7/7/16
to rubyonra...@googlegroups.com
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

Ruth Stephenson

unread,
Jul 7, 2016, 8:35:52 AM7/7/16
to rubyonra...@googlegroups.com

Ruth Stephenson

unread,
Jul 7, 2016, 8:44:35 AM7/7/16
to rubyonra...@googlegroups.com
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:
>> %>
>> 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

Emmanuel Abia

unread,
Jul 7, 2016, 8:52:52 AM7/7/16
to rubyonra...@googlegroups.com
How did you setup your model relationship between users and appointments

--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.

Johnny Stewart

unread,
Jul 7, 2016, 9:02:27 AM7/7/16
to rubyonra...@googlegroups.com
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.

Ruth Stephenson

unread,
Jul 7, 2016, 9:08:52 AM7/7/16
to rubyonra...@googlegroups.com
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

unread,
Jul 7, 2016, 9:11:15 AM7/7/16
to rubyonra...@googlegroups.com
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 Stephenson <li...@ruby-forum.com>

Emmanuel Abia

unread,
Jul 7, 2016, 9:21:26 AM7/7/16
to rubyonrails-talk@googlegroups com

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

--
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-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.

Ruth Stephenson

unread,
Jul 7, 2016, 12:19:24 PM7/7/16
to rubyonra...@googlegroups.com
Emmanuel Abia wrote in post #1184510:
> Ok...try current_user.appointments.last.id


Error:
undefined method `id' for nil:NilClass

Johnny Stewart

unread,
Jul 7, 2016, 4:04:43 PM7/7/16
to rubyonra...@googlegroups.com
Ruth Stephenson wrote in post #1184508:
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.
Reply all
Reply to author
Forward
0 new messages