Receiving already loaded object from find_by method of ActiveRecord::Associations::CollectionProx

I have the following models

class Parent < ActiveRecord::Base

has_many :children


class Child < ActiveRecord::Base

belongs_to :parent


What I want to do is changing a child object by parent.children.find_or_initialize_by() and modify the child object, then save it by But the children doens’t get saved. Here’s the code.

prepare a parent with a child

p ={:name=>‘parent’})

p.children <<{:name => ‘child’})

modify and save child

p = Parent.first

c = p.children.find_or_initialize_by({:name=>‘child’}) #=> returns the child already created above = ‘new child’ #=> children aren’t saved

I know this is because find_by method always returns a new object rather than the one already loaded. But it seems more natural to me if the code above works because the method is invoked through ActiveRecord::Associations::CollectionProxy. Am I missing anything to get this to work? Or are there any reasons that find_by on ActiveRecord::Associations::CollectionProxy have to work as it currently does?

(I know I can save the modified child by, but I want to save the child through, because I want the errors on child object to be referenced by parent.errors.)