Master Chief
2009-Feb-19 02:11 UTC
Associated child records not created on creation of a parent.
I am trying to create a record with association. Within the create
method, I would also like to pre-populate dependent (has_many) records
from a template in the database.
The child records are <u>mysteriously rolled back </u> if I insert
them in a loop. If I try to insert a single child record, it works.I
have read the books and tried to google my way out of this but am at a
dead end. Any help is appreciated.
Problem Statement ------------
PrototypeModel has many Departments .
Departments may also be grouped within Departments.
Trying to create a new PrototypeModel and populating the departments
(behind the scenes) from a template PrototypeModel specified by the
user in params[:prototype_model][:parent_id].
The save of the PrototypeModel fails as the new Department records are
invalid.
I checked the instances and find that the department.id is
nil. But that id is supposed to be populated by the associated
save! If I replace the departments.build argument in the
controller::create with a set of static arguments like :name =>
''Test
name'', :description=> ''Test Desc'' then it works.
though only one
hard code department is created :-(
Just cant get my head around this. Code is below:
Code :
1. class PrototypeModel < ActiveRecord::Base
2. belongs_to :author, :class_name => ''User''
3. has_many :departments
4. belongs_to :prototype_model
5. acts_as_tree :foreign_key => "parent_id"
6. end
Code :
1. class Department < ActiveRecord::Base
2. validates_presence_of :name, :description
3. validates_presence_of :parent_id
4. acts_as_tree :foreign_key => "parent_id"
5. belongs_to :department
6. belongs_to :prototype_model
7. end
Code :
1. # POST /prototype_models
2. # POST /prototype_models.xml
3. def create
4.
5. @template_model = PrototypeModel.find( params
[:prototype_model][:parent_id] )
6. template_departments = @template_model.departments
7.
8. @prototype_model = PrototypeModel.new(params
[:prototype_model])
9. @prototype_model.author = current_user
10.
11. for mydepartment in template_departments
12. logger.debug "Cloning Department #{mydepartment.name}"
13.
14. newDepartment= @prototype_model.departments.build( :name =>
mydepartment.name, :description=>
mydepartment.description, :parent_id=> mydepartment.parent_id )
15. end
16.
17. respond_to do |format|
18. if @prototype_model.save
19. flash[:notice] = ''PrototypeModel was successfully
created.''
20. format.html { redirect_to(@prototype_model) }
21. format.xml { render :xml => @prototype_model, :status
=> :created, :location => @prototype_model }
22. else
23. format.html { render :action => "new" }
24. format.xml { render :xml =>
@prototype_model.errors, :status => :unprocessable_entity }
25. end
26. end
27. end
I am using Rails 2.2.2 and Ruby 1.8.6
thanks
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Mark Reginald James
2009-Feb-19 14:39 UTC
Re: Associated child records not created on creation of a parent.
Master Chief wrote:> I am trying to create a record with association. Within the create > method, I would also like to pre-populate dependent (has_many) records > from a template in the database.I''m not exactly clear what you''re doing, but here are some comments that may help.> 1. class PrototypeModel < ActiveRecord::Base > 2. belongs_to :author, :class_name => ''User'' > 3. has_many :departments > 4. belongs_to :prototype_model > 5. acts_as_tree :foreign_key => "parent_id" > 6. end > > 1. class Department < ActiveRecord::Base > 2. validates_presence_of :name, :description > 3. validates_presence_of :parent_id > 4. acts_as_tree :foreign_key => "parent_id" > 5. belongs_to :department > 6. belongs_to :prototype_model > 7. end1. Are the two belongs_to associations that reference their own class necessary, or can you use the parent association generated by acts_as_tree? 2. You should use "validates_presence_of :parent" instead. Using the foreign key will prevent validation when the parent is new. You have to make sure that either (1), the foreign-key is non-NULL and points to an existing record, or (2), that a new parent object is assigned to the association. -- Rails Wheels - Find Plugins, List & Sell Plugins - http://railswheels.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 -~----------~----~----~----~------~----~------~--~---
Master Chief
2009-Feb-19 17:06 UTC
Re: Associated child records not created on creation of a parent.
Thank you for your response! 1. I didnt know acts_as_tree generated an association. Removed parent association from both classes. 2. Changed the validates_presence_of clause. It still gave me the same errors. :-( New Info: I also tried after removing the vpof clause altogether in departments. It removed a bunch of parent queries from the log. What remained was just a BEGIN and ROLLBACK but no error in the log. And in the flash area I still got the message that the department is invalid, so it cannot save the prototype_model. Going to add some more logging to see if I get any more info. Have been stuck here for 3 days, so really appreciate your help! regards On Feb 19, 6:39 am, Mark Reginald James <m...-bzGI/hKkdgQnC9Muvcwxkw@public.gmane.org> wrote:> Master Chief wrote: > > I am trying to create a record with association. Within the create > > method, I would also like to pre-populate dependent (has_many) records > > from a template in the database. > > I''m not exactly clear what you''re doing, but here are some > comments that may help. > > > 1. class PrototypeModel < ActiveRecord::Base > > 2. belongs_to :author, :class_name => ''User'' > > 3. has_many :departments > > 4. belongs_to :prototype_model > > 5. acts_as_tree :foreign_key => "parent_id" > > 6. end > > > 1. class Department < ActiveRecord::Base > > 2. validates_presence_of :name, :description > > 3. validates_presence_of :parent_id > > 4. acts_as_tree :foreign_key => "parent_id" > > 5. belongs_to :department > > 6. belongs_to :prototype_model > > 7. end > > 1. Are the two belongs_to associations that reference their > own class necessary, or can you use the parent association > generated by acts_as_tree? > > 2. You should use "validates_presence_of :parent" instead. > Using the foreign key will prevent validation when the > parent is new. You have to make sure that either > (1), the foreign-key is non-NULL and points to an existing > record, or (2), that a new parent object is assigned to the > association. > > -- > Rails Wheels - Find Plugins, List & Sell Plugins -http://railswheels.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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Master Chief
2009-Feb-19 18:01 UTC
Re: Associated child records not created on creation of a parent.
Resolved! One of the data sets inserted thru SQL as a template was not passing the Validates_presence_of clauses so it was failing to insert the association. Thats why my static data was working. Also changed the validates_presence_of: parent_id to validates_presence_of: parent Also removed the self reference in the belongs_to... Thanks for the nudge in the right direction! Now I can get back on track..... :-) --- On Feb 19, 9:06 am, Master Chief <emailssa...-/E1597aS9LQAvxtiuMwx3w@public.gmane.org> wrote:> Thank you for your response! > > 1. I didnt know acts_as_tree generated an association. Removed parent > association from both classes. > 2. Changed the validates_presence_of clause. > > It still gave me the same errors. :-( > > New Info: > I also tried after removing the vpof clause altogether in > departments. It removed a bunch of parent queries from the log. What > remained was just a BEGIN and ROLLBACK but no error in the log. And > in the flash area I still got the message that the department is > invalid, so it cannot save the prototype_model. > > Going to add some more logging to see if I get any more info. > Have been stuck here for 3 days, so really appreciate your help! > > regards > > On Feb 19, 6:39 am, Mark Reginald James <m...-bzGI/hKkdgQnC9Muvcwxkw@public.gmane.org> wrote: > > > Master Chief wrote: > > > I am trying to create a record with association. Within the create > > > method, I would also like to pre-populate dependent (has_many) records > > > from a template in the database. > > > I''m not exactly clear what you''re doing, but here are some > > comments that may help. > > > > 1. class PrototypeModel < ActiveRecord::Base > > > 2. belongs_to :author, :class_name => ''User'' > > > 3. has_many :departments > > > 4. belongs_to :prototype_model > > > 5. acts_as_tree :foreign_key => "parent_id" > > > 6. end > > > > 1. class Department < ActiveRecord::Base > > > 2. validates_presence_of :name, :description > > > 3. validates_presence_of :parent_id > > > 4. acts_as_tree :foreign_key => "parent_id" > > > 5. belongs_to :department > > > 6. belongs_to :prototype_model > > > 7. end > > > 1. Are the two belongs_to associations that reference their > > own class necessary, or can you use the parent association > > generated by acts_as_tree? > > > 2. You should use "validates_presence_of :parent" instead. > > Using the foreign key will prevent validation when the > > parent is new. You have to make sure that either > > (1), the foreign-key is non-NULL and points to an existing > > record, or (2), that a new parent object is assigned to the > > association. > > > -- > > Rails Wheels - Find Plugins, List & Sell Plugins -http://railswheels.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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---