如何通过与另一个模型实例进行比较来过滤ActiveRecord查询结果?

时间:2016-04-29 13:51:13

标签: ruby-on-rails arrays ruby rails-activerecord

我有一个简单的ActiveRecord查询:

-07:00

每个通知对象都有一个字段similar_changes = Notification.where(change_owner: 'foo1', change_target: 'foo2', change_cancelled: false) ,我还有另一个功能可以检查一个通知的change_type和另一个通知进行反向更改(在我的上下文中相互撤消的更改)应用程序)。

我需要接受此通知change_type并将其与阵列中的所有其他人进行比较。我必须引用像这样的对象:change_type其中第一个索引是数组中的每个ActiveRecord,第二个是指定Notification对象中哪个属性的字典。

我有一种感觉,我可以使用两个嵌套循环和if语句手动执行此操作,但我也知道Ruby,我觉得这应该是内置的。

我错了,还是有更好的方法来做到这一点?

这是代码(注意所有这些代码都没有完成,所以如果它不完美的话请耐心等待):

similar_changes[0]['change_type']

1 个答案:

答案 0 :(得分:1)

是的,您的similar_changes循环可以改进。

  • 修改你正在循环的数组令人困惑。我甚至不知道它是否可靠,因为我从来没有这样做过!
  • 依赖each的返回值也不是惯用的Ruby。 each通常用于对已存在的Enumerable元素执行某些操作,因此使用其返回值似乎很奇怪。

我会把它写成

similar_changes.reject do |change|
  cancel_inverse_change(change, change.change)
  change.cancelled?
end