有没有办法比较两个模型实例,如
Model.compare_by_name(“model1”,“model2”)将列出不同的列字段
答案 0 :(得分:3)
如果您想要显示所有不同字段及其值的映射,则可以使用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']}
答案 1 :(得分: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
答案 2 :(得分:0)
无需使用库或定义自定义方法,就可以轻松获得两个模型之间的差异。
例如,
a = Foo.first
b = Foo.second
a.attributes = b.attributes
a.changes #=> {"id" => [1,2] }