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.
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
--
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.
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
Cheers
Koz