比较返回布尔变量的两个ActiveRecords的每个值

时间:2011-01-20 21:15:12

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord compare

我正在使用Ruby on Rails 3,我有两个同一类帐户的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'即使只有一个是不同的。

2 个答案:

答案 0 :(得分:18)

account1.attributes == account2.attributes

那里,这很短。请注意,id包含在这些属性中。您可以在两者上使用.clone来避免这种情况,或者以其他方式将其从属性哈希中排除。例如:

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

答案 1 :(得分:1)

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