Hi Fred, Thank you for the response! What you said made sense. thanks for the explanation.
However, looking at the last criteria of the == implementation, we can see why something like what i mentioned would fail: let's say i have an 2 AR objects: > old = Something.find(1) => #<Something id: 1> then i create a new object: > new = Something.new => #<Something id: nil> > new.id = 1 # something like this is possible, how or why is another story... > new => #<Something id: 1> now do: > new == old => true > old == new => false == method should be commutative, right? 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 -~----------~----~----~----~------~----~------~--~---