Как проверить 2 массива разных объектов? - PullRequest
0 голосов
/ 22 октября 2009

Я хочу проверить, есть ли в элементах заявки активы, а @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

Результат озадачивает меня. После исследования я понимаю, что элементы в обоих массивах относятся к разным объектам, даже если они ссылаются на один и тот же идентификатор.

Как таковые, кажется, включают? больше не может работать в этом случае.

Может ли кто-нибудь подсказать, как еще мне проверить, есть ли в элементах заявки активы?

Claim HM Items
Items BT Claim

1 Ответ

1 голос
/ 22 октября 2009
@claim.items.include? @items_assets

Что вы спрашиваете здесь: «Содержит ли массив @claim.items элемент, равный объекту @item_assets

Вы, похоже, хотите спросить: «Содержит ли массив @claim.items элемент, равный любому элементу в другом массиве, @item_assets

@claim.items != @claim.items - @item_assets вернул бы true, если бы какой-либо элемент в @item_assets соответствовал любому элементу в @claim.items, но производительность при выполнении этого, вероятно, будет ужасной.

Я бы посмотрел на сохранение вашего @item_assets в Set, предполагая, что вы действительно хотите вытянуть их всех в память. Затем проверяет, будут ли ваши элементы @claim.items отображаться в этом Set будет намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...