On Apr 16, 4:17 am, Philip Hallstrom <phi...@pjkh.com> wrote:
>
> You've got something screwy somewhere...
>
Your case is different because of STI (so your comparisons here are
all false because the objects are of different class). If it weren't
for that then it's a slightly messed up situation - Active record
thinks it has a new record but it doesn't
Fred
> old = Toy.fin>> old = Toy.find(1)
> => #<BabyToy id: 1, ......>
> >> new = Toy.new
> => #<Toy id: nil, ....>
> >> new.id = 1
> => 1
> >> old == new
> => false
> >> new == old
> => false
>
> Rails 2.3.2.1
>
> -philip
>
> > appreciate any comments!
> > -Moo
>
> > On Apr 10, 10:52 am, Frederick Cheung <frederick.che...@gmail.com>
> > wrote:
> >> On Apr 10, 5:50 pm, Moo <janec...@gmail.com> wrote:> Anyone has any
> >> thoughts on this please?
>
> >> Basically the rationale is that == should mean 'do these objects
> >> correspond to the same database row ?'
>
> >> The reason why unsaved records are special cased is that two unsaved
> >> record would have equal id (nil in both cases) but if you saved them
> >> you would end up with 2 distinct rows in your database.
>
> >> I'm not sure why you're getting new ==old not being the same as old
> >> == new. They should both be false (and are on my machine)
>
> >> Fred
>
> >>> On Apr 8, 5:29 pm, Moo <janec...@gmail.com> wrote:
>
> >>>> Hi Everyone,
>
> >>>> I'm running into a problem with theActiveRecord::Base "==" method
> >>>> defined here (it's 2.3.2, but it looks the same in older versions
> >>>> too):
>
> >>>> # File rails-2.3.2/activerecord/lib/active_record/base.rb,
> >>>> line
> >>>> 2816
> >>>> 2816: def ==(comparison_object)
> >>>> 2817: comparison_object.equal?(self) ||
> >>>> 2818: (comparison_object.instance_of?(self.class) &&
> >>>> 2819: comparison_object.id == id &&
> >>>> 2820: !comparison_object.new_record?)
> >>>> 2821: end
>
> >>>> Because of the last criteria (!comparison_object.new_record?),
> >>>> something like this happens... say i have a new record and an
> >>>> existing
> >>>> record (different objects) and compare them:
>
> >>>>> new == old
> >>>> => true
> >>>>> old == new
>
> >>>> => false
>
> >>>> If this is intentional, can someone please explain why this is?
>
> >>>> Also what is the rational of only comparing the ID and not the
> >>>> all the
> >>>> values too and why does it matter if it's a new record or not?
>
> >>>> Thank you!
> >>>> -Moo
--~--~---------~--~----~------------~-------~--~----~
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@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---