Как вернуть значение вне цикла? - PullRequest
0 голосов
/ 29 июня 2019

Я хочу вернуть значение вне цикла.

@order.cart.line_items.to_a.sum { |li|
              if li.shop_product.method_1?
                (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_1
              elsif li.shop_product.method_2?
                (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_2
              end
            }

это возвращает мне значение, которое я хотел бы получить.

На мой взгляд, что-то вроде:

@order.cart.line_items.to_a.sum { |li|
              if li.shop_product.method_1?
                method_1_price = (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_1
              elsif li.shop_product.method_2?
               method_2_price =  (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_2
              end
            }

, а затем с помощью:

price = method_1_price + method_2_price

.., чтобы получить окончательную цену.

Как использовать значение из цикла внецикл?

Я пробовал второй фрагмент кода, но он не позволяет мне использовать значения вне цикла.Я искал в Google, но мало что показывает, что было полезно

1 Ответ

1 голос
/ 29 июня 2019

Используйте #map для преобразования коллекции в значения (получение значений вне цикла), затем используйте полученный сбор и выполните sum.

Примерно так:

price = @order.cart.line_items.map do |li|
  if li.shop_product.method_1?
    (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_1
  elsif li.shop_product.method_2?
    (li.shop_product.print_locations.to_a.sum { |pl| pl.vendor_price }) + li.shop_product.product.vendor_product.price_method_2
  end
end.compact.sum

#compact используется выше для фильтрации nil, когда li не соответствует ни method1, ни method2.

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