我想检查索赔项目中是否有资产,而@item_assets基本上会获取数据库中被归类为资产的所有项目。
执行以下操作时:
>> @claim.items
=> [#<Item id: 8, name: "chair", amount: 10.0, gst: 0.7, override: false, item_category_id: 7, item_expense_id: 8, claim_id: 8, club_id: 71, created_at: "2009-10-18 10:16:10", updated_at: "2009-10-18 10:16:10">, #<Item id: 9, name: "soemthing", amount: 20.0, gst: 1.4, override: false, item_category_id: 7, item_expense_id: 7, claim_id: 8, club_id: 71, created_at: "2009-10-18 10:16:10", updated_at: "2009-10-18 10:16:10">]
>> @items_assets
=> [#<Item id: 8, name: "chair", amount: 10.0, gst: 0.7, override: false, item_category_id: 7, item_expense_id: 8, claim_id: 8, club_id: 71, created_at: "2009-10-18 10:16:10", updated_at: "2009-10-18 10:16:10">, #<Item id: 9, name: "soemthing", amount: 20.0, gst: 1.4, override: false, item_category_id: 7, item_expense_id: 7, claim_id: 8, club_id: 71, created_at: "2009-10-18 10:16:10", updated_at: "2009-10-18 10:16:10">]
>> @claim.items.include? @items_assets
=> false
结果让我感到困惑。经过调查,我意识到两个数组上的项目都是不同的对象,即使它们引用相同的id。
因此,似乎包括?在这种情况下不能再工作了。
有人可以建议我如何检查索赔项目中是否有资产?
Claim HM Items
Items BT Claim
答案 0 :(得分:1)
@claim.items.include? @items_assets
你在这里问的是“数组@claim.items
是否包含一个等于@item_assets
对象的元素?”
您似乎想问的是“数组@claim.items
是否包含与另一个数组@item_assets
中的任何元素相等的元素?”
@claim.items != @claim.items - @item_assets
中的任何元素与@item_assets
中的任何元素匹配,则 @claim.items
将返回true,但这样做的表现可能会非常糟糕。
我会考虑将@item_assets
存储在Set
中,假设您确实希望将它们全部存入内存。然后检查@claim.items
元素是否出现在Set
中会更快。