我想从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中简单地取消设置该键的正确方法是什么?
答案 0 :(得分:1)
您描述的行为在许多计数上并不准确。首先,User.all
返回一个数组,而不是哈希,所以假设你在这里使用ActiveRecord,你的问题的前提是有缺陷的。
其次,使用Array#delete
从数组中删除项目肯定不会在项目本身上调用delete
。那不是真的。哈希也不会这样做。
第三,它也根本不会从数组中删除该项,除非它的索引碰巧匹配数组中项的索引,这不太可能。你疯狂地误解了你的实验。
您不会通过将属于该对象的某些字段(如ID)传递给Array#delete
来删除数组中的内容。您需要传递数组索引。您需要找出与当前用户匹配的记录索引,并将 传递给delete
。
但是,如果要通过其中一个属性从数组中删除对象,则使用reject
要好得多:
@users.reject! { |u| u.id == current_user.id }