删除哈希中的元素而不删除模型

时间:2014-03-10 01:40:06

标签: ruby-on-rails ruby hash

我想从Rails中的哈希中删除一个元素。 delete方法看起来很有前途,并且可以很好地处理一个意外后果......它会删除模型。

# Get all users.
@search = User.all

# Unset yourself. Your ID is stored in current_user.id
@users.delete(current_user.id)

生成的@users哈希实际上已删除了您自己的ID ...但它也会删除模型。在Ruby / Rails中简单地取消设置该键的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您描述的行为在许多计数上并不准确。首先,User.all返回一个数组,而不是哈希,所以假设你在这里使用ActiveRecord,你的问题的前提是有缺陷的。

其次,使用Array#delete从数组中删除项目肯定不会在项目本身上调用delete。那不是真的。哈希也不会这样做。

第三,它根本不会从数组中删除该项,除非它的索引碰巧匹配数组中项的索引,这不太可能。你疯狂地误解了你的实验。

您不会通过将属于该对象的某些字段(如ID)传递给Array#delete来删除数组中的内容。您需要传递数组索引。您需要找出与当前用户匹配的记录索引,并将 传递给delete

但是,如果要通过其中一个属性从数组中删除对象,则使用reject要好得多:

@users.reject! { |u| u.id == current_user.id }