3

次のようなモデルの 2 つのインスタンスを比較する方法はありますか

異なる列フィールドをリストする Model.compare_by_name("model1", "model2")

4

3 に答える 3

4

ActiveRecord::Diff異なるすべてのフィールドとその値のマッピングが必要な場合に使用できます。

alice = User.create(:name => 'alice', :email_address => 'alice@example.org')
bob = User.create(:name => 'bob', :email_address => 'bob@example.org')    
alice.diff?(bob)  # => true
alice.diff(bob)  # => {:name => ['alice', 'bob'], :email_address => ['alice@example.org', 'bob@example.org']}
alice.diff({:name => 'eve'})  # => {:name => ['alice', 'eve']}
于 2013-06-14T19:17:02.720 に答える
2

これには標準のコンパレータはありません。標準の ActiveModel コンパレーター:

Returns true if comparison_object is the same exact object, or comparison_object is of the same type and self has an ID and it is equal to comparison_object.id.

activesupport の Hash#diff を使用して、独自のものを作成できます。うまくいけば、次のようなものが開始されるはずです。

def Model.compare_by_name(model1, model2)
  find_by_name(model1).attributes.diff(find_by_name(model2).attributes)
end
于 2013-06-14T19:18:09.120 に答える