2009-10-22 47 views
0

我想檢查索賠的項目是否有資產,並且@item_assets基本上獲取數據庫中歸類爲資產的所有項目。如何檢查2個不同對象的數組?

當執行以下操作:

>> @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 

回答

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會快得多。

相關問題