I''m having a hard time wrapping my head around on implementing something like this: ------------ class Student < ARB has_many: attendances class Attendance < ARB belongs_to: student ------------ class AttendancesController < ApplicationController def check_in end def create @attendance = Attendance.new(params[:attendance]) 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. -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
You can do this in your create method 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 = Attendence.new @attn.student = @student @attn.save -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
In your migration make sure to set :unique => true for the idn like this: t.column :idn, :integer, :null => false, :unique => true AND validate it in your model: Class Student validates_uniqueness_of :idn validates_presence_of :idn -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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) I can''t figure out why the idn parameter doesn''t pass through. Here is my ''check_in'' view: <%= error_messages_for :attendance %> <% form_for :attendance, :url => { :action => :create } do |form| %> <%= form.text_field :idn %> <p><%= submit_tag ''Check In'' %></p> <% end %> Here is my newly updated AttendancesController: 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. -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> 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)1) Is a record created in your database or not? 2) 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. 3) 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. -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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.savestudent doesn''t exist>> s.savetrue How can I replicate this in my app? -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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. -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---