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
-~----------~----~----~----~------~----~------~--~---

Reply via email to