Как вызов переменной работает в методе? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть следующий метод:

vendor_orders = VendorOrder.where(id: params[:vendor_order_ids])
orders = Order.find(vendor_orders.pluck(:order_id))
products = Product.joins(:vendor_product).where(vendor_products:{vendor_id: current_user.id }).ids #get all vendor_products that match current_user.vendor
line_items = LineItem.joins(:shop_product).where(cart_id: orders.pluck(:cart_id), fulfillment_status: "processing", shop_products: {product_id: products}).where.not(fulfillment_status: "canceled")
messages = []
n = 0
puts "line items: #{line_items.count}" #puts out 1
line_items.map do |li|
  if li.update_attribute(:fulfillment_status, params[:mass][:fulfillment_status])
    n+=1
  else
    messages << "#{vendor_order.vendor_order_token}"
  end
end
puts "line items2: #{line_items.count}" #puts out 0
if n == line_items.count
  flash.keep[:notice] = "Update for #{vendor_orders.count} order(s) and #{n} product(s) successful"
else
  flash.keep[:notice] = "Failed update for Order: #{messages.join if messages.any?}"
end
puts "line item3 #{line_items.count}" #puts out 0
respond_to do |format|
  format.html { redirect_to vendor_orders_path }
end

У меня вопрос по поводу puts

При вызове line_items.count после обновления line_items, чтобы потом не совпадать переменная, она напоминает line_items сверху?

Это правда? Я всегда предполагал, что как только что-то будет определено и передано, оно останется со скоростью, если не будет переопределено.

1 Ответ

0 голосов
/ 04 марта 2020

Марек решил проблему, сообщив мне: .count - это вызов базы данных, который затем вызовет то, что вы определили ранее.

Чтобы решить эту проблему, я просто использую line_items_count = line_items.count и использую это выше любого изменения, чтобы проверить против этого.

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