Ruby on Rails:通过ID从数组中删除元素

3

有没有一些简写方式来表示

  @notifications = Notification.find(:all, :conditions => ['expires_at > ?', Time.now])

  notif = Notification.find(:all, cookie[0].to_i)
  @notifications.delete(notif[0]) if not notif.empty?

Cookie是存储在浏览器cookie中的通知ID。

这是一个迭代过程,它会删除用户不想看到的通知。

谢谢!=)

2个回答

8
如果这是一组ActiveRecord对象的数组,您可以像这样从数据库中删除:Notification.delete_all(:id => cookie[0].to_i) 如果这只是一个数组,那么您可以使用delete if:@notifications.delete_if{|x| x == cookie[0].to_i}

一个数组没有delete_all方法。=\ - NullVoxPopuli
这是一个 ActiveRecord 对象数组吗?如果是,您想要从数组中删除还是从数据库中删除?我添加了一行代码来从数组中删除。现在不太确定 @notifications 是什么。 - Geoff Lanotte
关闭, @notifications.delete_if{|x| x.id == cookie[0].to_i} 这个方法解决了问题。感谢您的帮助! - NullVoxPopuli

1
现在你可以使用delete_at( index )方法:
array = ['item0', 'item1', 2, 3]
array.delete_at 1
# => "item1" 
array.delete_at 2
# => 3
array
# => ["item0", 3] 

你可以使用slice!( index )来完成相同的操作。
注意:delete_at是一个改变原数组的方法,即使它没有以!结尾,所以不要依赖于它的返回值,它只会返回被删除的元素。

Reference: http://ruby-doc.org/core-2.2.0/Array.html#method-i-delete_at


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接