Hi all !
I've been meaning to ask for a while now. Please look at association_proxy:
http://dev.rubyonrails.org/browser/trunk/activerecord/lib/active_record/associations/association_proxy.rb#L105
Why are we only setting the primary key ? Why aren't we also copying
the reference to the owner object in the record ?
The following fails:
class Recipient < AR::B
belongs_to :account
validates_presence_of :account_id
before_validation {|r| r.account = r.email.account if r.email }
end
class Email < AR::B
has_many :recipients
belongs_to :account
end
email = Email.new(...)
email.recipients.build(...)
email.save!
ActiveRecord::RecordInvalid: Validation failed: Recipients is invalid
The problem is actually caused by the fact that AR doesn't copy the
owner object in the newly instantiated has_many. Patching 1.2-stable
with the following:
Index: lib/active_record/associations/association_proxy.rb
==================================================================---
lib/active_record/associations/association_proxy.rb (revision 5577)
+++ lib/active_record/associations/association_proxy.rb (working copy)
@@ -103,6 +103,8 @@
record["#{@reflection.options[:as]}_type"]
@owner.class.base_class.name.to_s
else
record[@reflection.primary_key_name] = @owner.id unless
@owner.new_record?
+ record.send(@reflection.active_record.name.underscore +
"=", @owner) \
+ if record.is_a?(ActiveRecord::Base)
end
end
allows my test to run, but I get one AR failure:
1) Error:
test_insert(TreeTest):
NoMethodError: undefined method `tree_mixin=' for
#<TreeMixin:0xb6efbbc0>
./test/../lib/active_record/base.rb:1860:in `method_missing'
./test/../lib/active_record/associations/association_proxy.rb:106:in
`send'
./test/../lib/active_record/associations/association_proxy.rb:106:in
`set_belongs_to_association_for'
./test/../lib/active_record/associations/has_many_association.rb:14:in
`build'
./test/../lib/active_record/associations/association_collection.rb:93:in
`create'
./test/mixin_test.rb:260:in `test_insert'
That's because I'm not finding the using reflection properly. But no
matter, is it something we want in the code base ?
Thanks !
--
François Beausoleil
http://blog.teksol.info/
http://piston.rubyforge.org/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-core-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---