[PATCH] Rails 3: fields_for helper doesn't work with association proxy objects

76 views
Skip to first unread message

Paul Rosania

unread,
May 26, 2010, 8:16:51 PM5/26/10
to Ruby on Rails: Core
Request for eyeballs. :-)

Mongoid uses association proxy objects. It overrides #nil? => false
when the association is missing. However since it uses proxy
objects, !!assocation is always true.

I have created a ticket with a patch that changes the association nil
test to call assocation.nil? rather than use implicit coercion of the
variable.

See:
https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4711-patch-rails-3-fields_for-helper-doesnt-work-with-association-proxy-objects

Michael Koziarski

unread,
May 28, 2010, 9:38:36 PM5/28/10
to rubyonra...@googlegroups.com
> Mongoid uses association proxy objects. It overrides #nil? => false
> when the association is missing. However since it uses proxy
> objects, !!assocation is always true.

This is why active record doesn't use proxy objects for nil belongs_to
and has_one associations, you can't override the boolean value of your
objects.

>
> I have created a ticket with a patch that changes the association nil
> test to call assocation.nil? rather than use implicit coercion of the
> variable.

These proxy objects don't follow correct ruby semantics and I'm not
entirely sure that we should take the performance hit to work around
that bug. There are bound to be other places where we use this form
and we're not going to fix all of them.

--
Cheers

Koz

Paul Rosania

unread,
May 29, 2010, 1:33:02 AM5/29/10
to rubyonra...@googlegroups.com
Understood.  I will flip this back to the Mongoid team.

So to clarify, as a matter of implementation, ORMs seeking compatibility with Rails should never use proxy objects for belongs_to or has_one associations?


--
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 rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-co...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.


Michael Koziarski

unread,
May 29, 2010, 1:45:07 AM5/29/10
to rubyonra...@googlegroups.com
> So to clarify, as a matter of implementation, ORMs seeking compatibility
> with Rails should never use proxy objects for belongs_to or has_one
> associations?

It's not really a rails thing, it's people expecting their library to
use by ruby developers expecting idiomatic ruby code to work.

if some_object.something

my_thingy = some_object.something || SOME_DEFAULT

These two cases are pretty fundamental, and while the null object
pattern is nice and clean, the fact that they can never work right
should be a sign it's not a great idea to try it.

--
Cheers

Koz

Paul Rosania

unread,
May 29, 2010, 12:23:40 PM5/29/10
to rubyonra...@googlegroups.com
Makes sense, thanks.

Cheers

Koz

Reply all
Reply to author
Forward
0 new messages