respond_to do |format|
if @attendance.save
flash[:notice] = 'You have successfully checked in.'
format.html { redirect_to :action => "check_in" }
else
format.html { render :action => "check_in" }
end
end
end
end
The Student table has a column named ‘idn’.
The Attendance table has a column named ‘student_id’ and a ‘created_on’
column.
This is what I’ve got so far: The student “checks in” by typing in their
IDN number into a text_field in the ‘check_in’ view. After hitting
‘submit’ the create method is invoked and the IDN number that the
student submitted is entered into the student_id field in the Attendance
table. This is what I would like to do: When the student submits their
IDN number, rails searches for the number in the idn column in the
student table. After locating it, the primary key for that IDN number is
entered into the student_id column in the Attendance table. If there is
no matching IDN then of course an error is invoked.
What would be the best way to do this? before_save method in the
Attendance model? I’m pretty much clueless. Sorry for the long
explanation but I wanted to be as detailed as possible. Any help would
be very appreciated.
class AttendancesController < ApplicationController
def check_in
end
def create #use AR helper find method to cut to the chase @student = Student.find_by_idn(params[:idn])
#create a new attendance and link the records
@attn = Attendance.new
@attn.student = @student
@attn.save
respond_to do |format|
if @attn.save
flash[:notice] = 'You have successfully checked in.'
format.html { redirect_to :action => "check_in" }
else
format.html { render :action => "check_in" }
end
end
end
end
I changed my migration like you suggested. Thanks for the help so far, I
knew this would look easier than I imagined.
Okay this is driving me crazy. I keep getting the same error. I deleted
the @attn.save line so there is no duplication. A record is not getting
saved in the database. I did however get a record to be saved via the
console as follows:
a = Attendance.new
s = Student.find_by_idn(1546)
a.student = s
a.save
student doesn’t exist
Okay I got the correct student_id being saved into the database with the
following method in the Attendance model:
def before_create
self.student = Student.find_by_idn(student_id)
end
I have another problem now. If the IDN is not found or doesn’t exist,
the student_id attribute for the Attendance object returns nil and
brings up the same error as before (the student_id cannot be NULL). How
can I get the nice looking error messages that you often see for simple
validations?
It would say something like “#{student_id} is not a valid IDN” above the
check in form.
Thanks for the reply! I keep getting an error like this:
ActiveRecord::StatementInvalid in AttendancesController#create
Mysql::Error: #23000Column ‘student_id’ cannot be null: INSERT INTO
attendances (created_on, student_id) VALUES(‘2006-12-27 00:40:05’,
NULL)
Is a record created in your database or not?
If the student_id is NULL, then perhaps it is because @student is
also null. Try doing the create function in the console step by step to
see what is happening.
check development.log for more info on what is happening under the
hood.
#create a new attendance and link the records
@attn = Attendance.new
@attn.student = @student
@attn.save
respond_to do |format|
if @attn.save
flash[:notice] = 'You have successfully checked in.'
This will try to save @attn twice. You save it directly and then save
again if @attn. Delete one of the save lines.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.