我有一个简单的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']
答案 0 :(得分:1)
是的,您的similar_changes
循环可以改进。
each
的返回值也不是惯用的Ruby。 each
通常用于对已存在的Enumerable元素执行某些操作,因此使用其返回值似乎很奇怪。我会把它写成
similar_changes.reject do |change|
cancel_inverse_change(change, change.change)
change.cancelled?
end