2011-11-07 1 views
1

== 연산자를 오버라이드하여 실제 앱에 대해이를 아주 간단하게 고쳤습니다. 그러나 그것은 내게 열매가되어 설명을 찾을 수 없었습니다. 내가 아는 한, ActiveRecord는 id 필드를 통해 두 개의 기존 레코드가 동일한 지 여부를 결정해야합니다. 맞습니까?기괴한 액티브 레코드 동등한 문제

분명히, 아니요!

Loading development environment (Rails 3.0.4) 
irb(main):001:0> c = ChallengeClaim.find(1) 
=> #<ChallengeClaim id: 1, collection_id: 954, creation_id: nil, creation_type: nil, request_signup_id: 2, request_prompt_id: 5, claiming_user_id: 8, sent_at: nil, fulfilled_at: nil, defaulted_at: nil, created_at: "2011-09-23 04:39:07", updated_at: "2011-09-23 04:39:07"> 
irb(main):002:0> c2 = ChallengeClaim.find(2) 
=> #<ChallengeClaim id: 2, collection_id: 954, creation_id: nil, creation_type: nil, request_signup_id: 2, request_prompt_id: 4, claiming_user_id: 8, sent_at: nil, fulfilled_at: nil, defaulted_at: nil, created_at: "2011-11-07 17:47:33", updated_at: "2011-11-07 17:47:33"> 
irb(main):003:0> c == c2 
=> true 

?!? !! ??!

모든 설명이 감사 드리며 밤에 다시 잠을 잘 수 있습니다. :>

+5

어딘가에서'ChallengeClaim'에'<=> (other)'을 구현 했습니까? –

+2

모델 정의에서 기본 키를 사용자 정의 했습니까? ActiveRecord 객체의 동일성은 객체의 식별 열/속성을 비교하여 수행됩니다. 속성 비교에 의한 속성이 아닙니다. 적어도 그건 내 이해 ... – jaydel

+0

크리스 완전히 그랬다. * facepalms * 답변을 게시하여 확인할 수 있습니까? – shalott

답변

0

Chris Heald가 위에 언급 한 것처럼 실제로 비교 연산자 < =>가 ChallengeClaim에 정의되었습니다!