Je cours la méthode suivante et je passe avec succès deux arguments (inventaire, quantité) dans la méthode. Cependant, je n'utilise pas correctement les méthodes .first
et .each
. Je tente de remplacer .each avec le .select
pour sélectionner l'élément de panier avec le ID d'inventaire: 6Ruby Select méthode (pour un tableau) problèmes
remplacement possible .each: (ne fonctionne pas) inventory_to_increment = @items.select{|item| item_id == inventory}
def increment_inventory_quantity(inventory, quantity)
inventory_to_increment = @items.each{|item| item.inventory == inventory}
unless inventory_to_increment.empty?
inventory_to_increment = inventory_to_increment.first
else
# error handling here
end
inventory_to_increment.quantity = quantity.to_i
end
J'ai utilisé Debugger Ruby, pour déboguer mon code:
inventory_to_increment = @ items.each {| item | item.inventory == inventaire}
p inventory = 6
moins inventory_to_increment .empty?
CartItem:0x102c4a4c0 @quantity=22, @inventory=#<Inventory id: 1
CartItem:0x102c49638 @quantity=2, @inventory=#<Inventory id: 8
CartItem:0x102c48918 @quantity=4, @inventory=#<Inventory id: 50
CartItem:0x102c47b80 @quantity=2, @inventory=#<Inventory id: 6
inventory_to_increment.first
CartItem:0x102c4a4c0 @quantity=22, @inventory=#<Inventory id: 1
inventory_to_increment.quantity = quantity.to_i
= 3
J'ai essayé plusieurs combinaisons et je besoin de quelques conseils de tableau de base Ruby. Merci d'avance!
SORTIE DE MISE À JOUR DE RÉPONSE
inventory_to_increment = @items.select{|item| item.inventory_id == inventory}
(rdb:1) list
[21, 30] in /Users/justin/cart/app/models/cart.rb
21
22
23 def increment_inventory_quantity(inventory, quantity)
24 debugger
25
=> 26 inventory_to_increment = @items.select{|item| item.inventory_id == inventory}
27 unless inventory_to_increment.empty?
28 inventory_to_increment.first
29 end
30
(rdb:1) p @items
[#<CartItem:0x102df1828 @quantity=22, @inventory=#<Inventory id: 1>>, #<CartItem:0x102df09a0 @quantity=2, @inventory=#<Inventory id: 8>>, #<CartItem:0x102ded908 @quantity=21, @inventory=#<Inventory id: 50>>]
(rdb:1) p inventory
50
(rdb:1) p quantity
"11"
(rdb:1) p item.inventory.id
NameError Exception: undefined local variable or method `item' for #<Cart:0x102df18f0>
(rdb:1) p item.inventory_id
NameError Exception: undefined local variable or method `item' for #<Cart:0x102df18f0>
(rdb:1) next
/Users/justin/.gem/ruby/1.8/gems/actionpack-2.3.5/lib/action_controller/rescue.rb:162
rescue_action(exception)
N'oubliez pas 'inventory_to_increment.save!'. –
Essayez de remplacer 'item.inventory_id == inventory' par' item.inventory.inventory_id == inventory' –