2011-01-20 9 views
4

を返す2つのActiveRecordをそれぞれの値を比較私は3はRuby on Railsを使用していますが、私はこれらのような同じクラスのアカウントの2つのActiveRecordオブジェクトを持っている:ブール変数

# Account1 
<Account id: 1, name: "Test name 1", surname: "Test surname 1", email: "...", ...> 

方法
# Account2 
<Account id: 2, name: "Test name 2", surname: "Test surname 2", email: "...", ...> 

をAccount1の各属性をAccount2の対応する属性と比較して、値が等しいかどうかをテストします。 Account1のすべての値がAccount2の値と等しい場合は 'true'、それ以外の場合は 'false'を出力します。

答えて

18
account1.attributes == account2.attributes 

これはかなり短いです。ただし、idはこれらの属性に含まれています。両方で.cloneを使用すると、それを回避したり、他の方法で属性ハッシュから除外することができます。たとえば:

account1.attributes.except('id') == account2.attributes.except('id') 
+0

質問を更新しました。 – user502052

+0

どちらの答えも読んでいないようです。 '@ ar_object1 == @ ar_object2'を使うだけで、属性ではなくidで比較されるので、あなたが望むことはできません。あなたが与えてくれた提案に従ってみてください(私の最初の、もちろん:-) – noodl

+0

Dho!私は 'を忘れてしまった。属性の部分!ありがとう – user502052

0
(account1.attributes.keys - ["id"]).inject(true) { |memo, att| memo && (account1[att] == account2[att]) } 
+0

質問が更新されました。 – user502052