Hi I''m not too sure how best to explain this but here goes! I am trying to write an appointment system. I have, through example, just about got the dynamics correct. Even tried to play with some table joins (and excuse me if I''ve used the incorrect terminlogy). But no matter what I try I can''t seem to get the following code to work. I have a cart filled with Treatment id''s. I have a LineItem model set up as follows: class LineItem < ActiveRecord::Base belongs_to :appointment belongs_to :customer belongs_to :therapist belongs_to :treatment end I have worked out enough to be able to create a new LineItem record. I have populated it with appointment, customer and therapist data. But I cannot seem to get the treatment information from the cart into the LineItem record. Any ideas? My code is as follows. I keep coming across this idea of using << but none of the literature I''m reading makes a huge deal of sense. @cart = find_treat l = LineItem.new c = Customer.find(session[:currentcustID]) t = Therapist.find(params[:appt_therapist]) a = Appointment.new a.appdate = params[:appt_date] a.apptime = params[:appt_time] a.applength = @cart.total_time a.customer = c l.appointment = a l.customer = c l.therapist = t tr = Treatment.new @cart.items.each do |item| tr = Treatment.find(item.id) logger.warn("Currently Dealing with: #{tr.desclong}") l.treatment << tr end #l.save I keep getting variations of the following error message: NoMethodError (You have a nil object when you didn''t expect it! You might have expected an instance of Array. The error occurred while evaluating nil.<<): Thanks in advance for any help you might be able to give. Darren --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Could you post your Treatment model here? It may clarify the situation. LineItem belongs_to :treatment - I guess, something is wrong here. Maybe it should be LineItem has_many :treatments? Because you are trying to assign multiple treatments to one LineItem. On 2 сент, 23:27, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi > > I''m not too sure how best to explain this but here goes! > > I am trying to write an appointment system. I have, through example, > just about got the dynamics correct. Even tried to play with some > table joins (and excuse me if I''ve used the incorrect terminlogy). But > no matter what I try I can''t seem to get the following code to work. > > I have a cart filled with Treatment id''s. I have a LineItem model set > up as follows: > > class LineItem < ActiveRecord::Base > belongs_to :appointment > belongs_to :customer > belongs_to :therapist > belongs_to :treatment > end > > I have worked out enough to be able to create a new LineItem record. > I have populated it with appointment, customer and therapist data. But > I cannot seem to get the treatment information from the cart into the > LineItem record. > > Any ideas? > > My code is as follows. I keep coming across this idea of using << but > none of the literature I''m reading makes a huge deal of sense. > > @cart = find_treat > l = LineItem.new > > c = Customer.find(session[:currentcustID]) > t = Therapist.find(params[:appt_therapist]) > > a = Appointment.new > a.appdate = params[:appt_date] > a.apptime = params[:appt_time] > a.applength = @cart.total_time > a.customer = c > > l.appointment = a > l.customer = c > l.therapist = t > > tr = Treatment.new > > @cart.items.each do |item| > tr = Treatment.find(item.id) > logger.warn("Currently Dealing with: #{tr.desclong}") > l.treatment << tr > end > > #l.save > > I keep getting variations of the following error message: > > NoMethodError (You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occurred while evaluating nil.<<): > > Thanks in advance for any help you might be able to give. > > Darren--~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
tr = Treatment.new>> There is no need for this line. You create new objects with find. If nothing is found, nil is returned@cart.items.each do |item| tr = Treatment.find(item.id) logger.warn("Currently Dealing with: #{tr.desclong}") l.treatment << tr end>> tr is nil somehow. I''ll code this as:@cart.items.each do |item| if Treatment.find(item.id) logger.warn("Currently Dealing with: #{tr.desclong}") l.treatment << tr end end>> However, you are assigning multiple tr to l, and you declared a belongs_to relationship.Hope it helps. Regards, Jorge Corona. On Sep 2, 2:27 pm, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi > > I''m not too sure how best to explain this but here goes! > > I am trying to write an appointment system. I have, through example, > just about got the dynamics correct. Even tried to play with some > table joins (and excuse me if I''ve used the incorrect terminlogy). But > no matter what I try I can''t seem to get the following code to work. > > I have a cart filled with Treatment id''s. I have a LineItem model set > up as follows: > > class LineItem < ActiveRecord::Base > belongs_to :appointment > belongs_to :customer > belongs_to :therapist > belongs_to :treatment > end > > I have worked out enough to be able to create a new LineItem record. > I have populated it with appointment, customer and therapist data. But > I cannot seem to get the treatment information from the cart into the > LineItem record. > > Any ideas? > > My code is as follows. I keep coming across this idea of using << but > none of the literature I''m reading makes a huge deal of sense. > > @cart = find_treat > l = LineItem.new > > c = Customer.find(session[:currentcustID]) > t = Therapist.find(params[:appt_therapist]) > > a = Appointment.new > a.appdate = params[:appt_date] > a.apptime = params[:appt_time] > a.applength = @cart.total_time > a.customer = c > > l.appointment = a > l.customer = c > l.therapist = t > > tr = Treatment.new > > @cart.items.each do |item| > tr = Treatment.find(item.id) > logger.warn("Currently Dealing with: #{tr.desclong}") > l.treatment << tr > end > > #l.save > > I keep getting variations of the following error message: > > NoMethodError (You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occurred while evaluating nil.<<): > > Thanks in advance for any help you might be able to give. > > Darren--~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
The value for l.treatment is what is nil, and if does not respond to the << operator. And that appears to be caused by some confusion in your data model. In your LineItem class, you say: belongs_to :treatment So you need to use treatment the same way you are using appointment, customer and therapist (which also use the belong_to relationship): l.treatment = tr And you can only store one treatment at a time in the database. Each assignment overwrites the previous one, so you need to create a new LineItem for every Treatment you want to save. On the other, if what you really want is to have multiple treatments per line item, then you need to say this in your LineItem class: has_many :treatments And this in your Treatment class: belongs_to :line_item and then you can use the append operation in your loop, though you will need to use the plural form: l.treatments << tr First you have to decide what the correct database table relationships are. There might be good reasons to do it either way. On Sep 2, 12:27 pm, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi > > I''m not too sure how best to explain this but here goes! > > I am trying to write an appointment system. I have, through example, > just about got the dynamics correct. Even tried to play with some > table joins (and excuse me if I''ve used the incorrect terminlogy). But > no matter what I try I can''t seem to get the following code to work. > > I have a cart filled with Treatment id''s. I have a LineItem model set > up as follows: > > class LineItem < ActiveRecord::Base > belongs_to :appointment > belongs_to :customer > belongs_to :therapist > belongs_to :treatment > end > > I have worked out enough to be able to create a new LineItem record. > I have populated it with appointment, customer and therapist data. But > I cannot seem to get the treatment information from the cart into the > LineItem record. > > Any ideas? > > My code is as follows. I keep coming across this idea of using << but > none of the literature I''m reading makes a huge deal of sense. > > @cart = find_treat > l = LineItem.new > > c = Customer.find(session[:currentcustID]) > t = Therapist.find(params[:appt_therapist]) > > a = Appointment.new > a.appdate = params[:appt_date] > a.apptime = params[:appt_time] > a.applength = @cart.total_time > a.customer = c > > l.appointment = a > l.customer = c > l.therapist = t > > tr = Treatment.new > > @cart.items.each do |item| > tr = Treatment.find(item.id) > logger.warn("Currently Dealing with: #{tr.desclong}") > l.treatment << tr > end > > #l.save > > I keep getting variations of the following error message: > > NoMethodError (You have a nil object when you didn''t expect it! > You might have expected an instance of Array. > The error occurred while evaluating nil.<<): > > Thanks in advance for any help you might be able to give. > > Darren--~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi again OK. I''ve decided my fundamental problem here is a lack of understanding about models. I have enough to get my started by getting lost quickly. So, following all your advice I have redone my models as such: class Appointment < ActiveRecord::Base has_many :line_items belongs_to :customer end class Customer < ActiveRecord::Base has_many :line_items has_many :appointment end class LineItem < ActiveRecord::Base belongs_to :appointment belongs_to :customer belongs_to :therapist has_many :treatlines end class Therapist < ActiveRecord::Base has_many :line_items end class Treatment < ActiveRecord::Base has_many :treatlines end class Treatline < ActiveRecord::Base belongs_to :line_item belongs_to :treatment end I have updated my code to try and save the information I need to the following: def book_appointment # Need to write this to take in the date from the date and time boxes and then put it with all the rest of the information # to make the appointment # Create new appointment @cart = find_treat # Setup data column for the appointment l = LineItem.new c = Customer.find(session[:currentcustID]) t = Therapist.find(params[:appt_therapist]) # Add a new appointment a = Appointment.new a.appdate = params[:appt_date] a.apptime = params[:appt_time] a.applength = @cart.total_time a.customer = c l.appointment = a l.customer = c l.therapist = t # Need to work out how to add treatments to this massive list! Refer back to book! @cart.items.each do |item| if Treatment.find(item.id) tr = Treatline.new tr.treatment = Treatment.find(item.id) logger.warn("Treatment desclong is: #{tr.treatment.desclong}") l.treatlines << tr end end l.save end But I''m now getting the following error message: ActiveRecord::StatementInvalid (Mysql::Error: Column ''treatline_id'' cannot be null: INSERT INTO `line_items` (`updated_at`, `therapist_id`, `treatline_id`, `customer_id`, `appointment_id`, `created_at`) VALUES(''2008-09-03 15:00:06'', 2, NULL, 2, 8, ''2008-09-03 15:00:06'')): I felt it would be better to, for each line item, keep the treatments that each customer has in a seperate table. Hence I''ve now created a table called treatline. This table would, in turn, reference the master treatments table which holds all the treatments on offer. But I have no idea who to get the line_items table to hold the id for all the treatlines I am associating with an order. If that makes sense (and it sure doesn''t seem to be making much sense to me at the moment!). It''s like being sat with a present. I think I have the tools to get inside the wrapping, but I just can''t find the scissors. I know my misunderstanding of models is at fault here so any help in clearing the fog and getting this to save an appointment would be great. I hate only having half the knowledge! It''s driving me to drink! Thanks in advance Darren On Sep 2, 8:59 pm, rasfast <rasf...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Could you post your Treatment model here? It may clarify the > situation. > LineItem belongs_to :treatment - I guess, something is wrong here. > Maybe it should be > LineItem has_many :treatments? > Because you are trying to assign multiple treatments to one LineItem. > > On 2 сент, 23:27, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Hi > > > I''m not too sure how best to explain this but here goes! > > > I am trying to write an appointment system. I have, through example, > > just about got the dynamics correct. Even tried to play with some > > table joins (and excuse me if I''ve used the incorrect terminlogy). But > > no matter what I try I can''t seem to get the following code to work. > > > I have a cart filled with Treatment id''s. I have a LineItem model set > > up as follows: > > > class LineItem < ActiveRecord::Base > > belongs_to :appointment > > belongs_to :customer > > belongs_to :therapist > > belongs_to :treatment > > end > > > I have worked out enough to be able to create a new LineItem record. > > I have populated it with appointment, customer and therapist data. But > > I cannot seem to get the treatment information from the cart into the > > LineItem record. > > > Any ideas? > > > My code is as follows. I keep coming across this idea of using << but > > none of the literature I''m reading makes a huge deal of sense. > > > @cart = find_treat > > l = LineItem.new > > > c = Customer.find(session[:currentcustID]) > > t = Therapist.find(params[:appt_therapist]) > > > a = Appointment.new > > a.appdate = params[:appt_date] > > a.apptime = params[:appt_time] > > a.applength = @cart.total_time > > a.customer = c > > > l.appointment = a > > l.customer = c > > l.therapist = t > > > tr = Treatment.new > > > @cart.items.each do |item| > > tr = Treatment.find(item.id) > > logger.warn("Currently Dealing with: #{tr.desclong}") > > l.treatment << tr > > end > > > #l.save > > > I keep getting variations of the following error message: > > > NoMethodError (You have a nil object when you didn''t expect it! > > You might have expected an instance of Array. > > The error occurred while evaluating nil.<<): > > > Thanks in advance for any help you might be able to give. > > > Darren--~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thought it might also be important to put the LineItems model set up in as well? class CreateLineItems < ActiveRecord::Migration def self.up create_table :line_items do |t| t.column :treatline_id, :integer, :null => false t.column :customer_id, :integer, :null => false t.column :therapist_id, :integer, :null => false t.column :appointment_id, :integer, :null => false t.timestamps end execute "alter table line_items add constraint fk_line_item_treatlines foreign key (treatline_id) references treatlines(id)" execute "alter table line_items add constraint fk_line_item_customers foreign key (customer_id) references customers(id)" execute "alter table line_items add constraint fk_line_item_therapists foreign key (therapist_id) references therapists(id)" execute "alter table line_items add constraint fk_line_item_appointments foreign key (appointment_id) references appointments(id)" execute "alter table treatlines add constraint fk_treatline_line_items foreign key (line_item_id) references line_items(id)" end def self.down drop_table :line_items end end And treatlines? class CreateTreatlines < ActiveRecord::Migration def self.up create_table :treatlines do |t| t.column :treatment_id, :integer, :null => false t.column :line_item_id, :integer, :null => false t.timestamps end execute "alter table treatlines add constraint fk_treatline_treatments foreign key (treatment_id) references treatments(id)" end def self.down drop_table :treatlines end end Thanks Darren On Sep 3, 3:04 pm, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi again > > OK. I''ve decided my fundamental problem here is a lack of > understanding about models. I have enough to get my started by getting > lost quickly. > > So, following all your advice I have redone my models as such: > > class Appointment < ActiveRecord::Base > has_many :line_items > belongs_to :customer > end > > class Customer < ActiveRecord::Base > has_many :line_items > has_many :appointment > end > > class LineItem < ActiveRecord::Base > belongs_to :appointment > belongs_to :customer > belongs_to :therapist > has_many :treatlines > end > > class Therapist < ActiveRecord::Base > has_many :line_items > end > > class Treatment < ActiveRecord::Base > has_many :treatlines > end > > class Treatline < ActiveRecord::Base > belongs_to :line_item > belongs_to :treatment > end > > I have updated my code to try and save the information I need to the > following: > > def book_appointment > # Need to write this to take in the date from the date and time > boxes and then put it with all the rest of the information > # to make the appointment > # Create new appointment > @cart = find_treat > # Setup data column for the appointment > l = LineItem.new > > c = Customer.find(session[:currentcustID]) > t = Therapist.find(params[:appt_therapist]) > # Add a new appointment > a = Appointment.new > a.appdate = params[:appt_date] > a.apptime = params[:appt_time] > a.applength = @cart.total_time > a.customer = c > > l.appointment = a > l.customer = c > l.therapist = t > # Need to work out how to add treatments to this massive list! > Refer back to book! > @cart.items.each do |item| > if Treatment.find(item.id) > tr = Treatline.new > tr.treatment = Treatment.find(item.id) > logger.warn("Treatment desclong is: > #{tr.treatment.desclong}") > l.treatlines << tr > end > end > l.save > > end > > But I''m now getting the following error message: > > ActiveRecord::StatementInvalid (Mysql::Error: Column ''treatline_id'' > cannot be null: INSERT INTO `line_items` (`updated_at`, > `therapist_id`, `treatline_id`, `customer_id`, `appointment_id`, > `created_at`) VALUES(''2008-09-03 15:00:06'', 2, NULL, 2, 8, ''2008-09-03 > 15:00:06'')): > > I felt it would be better to, for each line item, keep the treatments > that each customer has in a seperate table. Hence I''ve now created a > table called treatline. This table would, in turn, reference the > master treatments table which holds all the treatments on offer. But I > have no idea who to get the line_items table to hold the id for all > the treatlines I am associating with an order. If that makes sense > (and it sure doesn''t seem to be making much sense to me at the > moment!). > > It''s like being sat with a present. I think I have the tools to get > inside the wrapping, but I just can''t find the scissors. I know my > misunderstanding of models is at fault here so any help in clearing > the fog and getting this to save an appointment would be great. I hate > only having half the knowledge! It''s driving me to drink! > > Thanks in advance > > Darren > > On Sep 2, 8:59 pm, rasfast <rasf...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Could you post your Treatment model here? It may clarify the > > situation. > > LineItem belongs_to :treatment - I guess, something is wrong here. > > Maybe it should be > > LineItem has_many :treatments? > > Because you are trying to assign multiple treatments to one LineItem. > > > On 2 сент, 23:27, "Ruby on Rails: Talk" <dazzaroo...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > Hi > > > > I''m not too sure how best to explain this but here goes! > > > > I am trying to write an appointment system. I have, through example, > > > just about got the dynamics correct. Even tried to play with some > > > table joins (and excuse me if I''ve used the incorrect terminlogy). But > > > no matter what I try I can''t seem to get the following code to work. > > > > I have a cart filled with Treatment id''s. I have a LineItem model set > > > up as follows: > > > > class LineItem < ActiveRecord::Base > > > belongs_to :appointment > > > belongs_to :customer > > > belongs_to :therapist > > > belongs_to :treatment > > > end > > > > I have worked out enough to be able to create a new LineItem record. > > > I have populated it with appointment, customer and therapist data. But > > > I cannot seem to get the treatment information from the cart into the > > > LineItem record. > > > > Any ideas? > > > > My code is as follows. I keep coming across this idea of using << but > > > none of the literature I''m reading makes a huge deal of sense. > > > > @cart = find_treat > > > l = LineItem.new > > > > c = Customer.find(session[:currentcustID]) > > > t = Therapist.find(params[:appt_therapist]) > > > > a = Appointment.new > > > a.appdate = params[:appt_date] > > > a.apptime = params[:appt_time] > > > a.applength = @cart.total_time > > > a.customer = c > > > > l.appointment = a > > > l.customer = c > > > l.therapist = t > > > > tr = Treatment.new > > > > @cart.items.each do |item| > > > tr = Treatment.find(item.id) > > > logger.warn("Currently Dealing with: #{tr.desclong}") > > > l.treatment << tr > > > end > > > > #l.save > > > > I keep getting variations of the following error message: > > > > NoMethodError (You have a nil object when you didn''t expect it! > > > You might have expected an instance of Array. > > > The error occurred while evaluating nil.<<): > > > > Thanks in advance for any help you might be able to give. > > > > Darren--~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---