Rails:根据列销毁除最新的所有内容

时间:2014-05-07 05:17:30

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

我有一个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

1 个答案:

答案 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