我有一个 Rails 站点,它记录了一些简单的操作,例如人们对信息的支持和反对。对于每一个新动作,EventLog
都会创建一个。
如果用户改变主意怎么办?我有一个after_create
回调,它寻找补充动作并在找到最近的一对时删除两者。为清楚起见,我的意思是,如果一个人对某事表示赞成并很快取消,则两者event_logs
都将被删除。接下来是我的回调。
# Find duplicate events by searching nearly all the fields in the EventLog table
@duplicates = EventLog.where("user_id = ? AND event = ? AND project_id = ? AND ..., ).order("created_at DESC")
if @duplicates.size > 1
@duplicates.limit(2).destroy_all
end
上面的代码不太有效,因为如果任何字段恰好为 nil,则查询返回[]
.
我如何编写此代码以便它可以处理空值,和/或有更好的方法来完全做到这一点?