我有一个Authorisation
模型,其中包含过时的重复项。我想根据:provider
中的Authorisation
列删除除最新内容之外的所有内容,为我留下最新的"linkedin"
授权,最新的"facebook"
等等。< / p>
我该怎么写这个方法?逻辑上这样的东西,但它给出了这个错误(TypeError: can't convert Authorisation to Array (Authorisation#to_ary gives NilClass)
):
old = Authorisation.where(provider: 'facebook') - Authorisation.where(provider: 'facebook').last
答案 0 :(得分:2)
也许这一个:
last_record = Authorisation.where(provider: 'facebook').last
Authorisation.where('created_at < ?', last_record.created_at).delete_all
如果有created_at
。在其他情况下,您应该获取除last之外的所有ID,并从该数组中删除具有id的记录。
另一种方法是应用not
进行查询。像:
Authorisation.where.not(id: Authorisation.last.id).delete_all
但是我觉得它只适用于Rails 4。
<强>更新强>
这样更好:
Authorisation.where('id != ?', Authorisation.last.id).delete_all