J'ai un panier très simple qui affiche la quantité d'article dans un champ texte et le nom de l'article. Je peux aller chercher les bonnes données, je ne peux pas passer mes deux arguments dans ma méthode (numéro d'inventaire et quantité). Je reçois une erreur d'argument dans ma méthode cart_update du contrôleur d'inventaire.Comment puis-je passer 2 arguments en utilisant un formulaire simple?
add_to_cart.html.erb
<% for item in @cart.items %>
<tr>
<td><% form_for item, :url => {:action => "cart_update", :id => "#{item.getinventoryid}", :quantity => "3"} do |f| %>
<%= f.text_field :quantity, :size => '3' %>
<%= f.hidden_field :id, :value => "#{item.getinventoryid}" %>
<%= f.submit 'cart_update' %>
<% end %></td>
<td><%=h item.title %></li></td>
</tr>
<% end %>
modèle cart_item.rb
attr_accessor :inventory, :quantity
def initialize(inventory)
@inventory = inventory
@quantity = 1
end
modèle cart.rb
attr_accessor :items
def increment_inventory_quantity(inventory, quantity)
inventory_to_increment = @items.select{|item| item.inventory == inventory}
# We do this because select will return an array
unless inventory_to_increment.empty?
inventory_to_increment = inventory_to_increment.first
else
# error handling here
end
inventory_to_increment.quantity = quantity
end
inventories_controller.rb
def cart_update
@inventory = Inventory.find(params[:id])
@cart = find_cart
@cart.increment_inventory_quantity(params[:inventory])
end
L'erreur se lit comme suit:ArgumentError in InventoriesController#cart_update
inventories_controller.rb: 24: dans increment_inventory_quantity' inventories_controller.rb:24:in
cart_update »
avec les paramètres suivants:
{"commit"=>"cart_update",
"quantity"=>"3",
"_method"=>"put",
"authenticity_token"=>"CK6to1uGWPszjz8vfL1Er3DLgi8cIMtLxfFb49a4wCE=",
"id"=>"5",
"cart_item"=>{"quantity"=>"11",
"id"=>"5"}}
Je suis vraiment confus parce qu'il semble que je passe les paramètres dont j'ai besoin. En outre, l'URL est au format: http://localhost:3000/inventories/cart_update/5?quantity=3
, ce qui est également ce que je m'attendais à voir. Qu'est-ce que je fais c'est évidemment faux?
Merci à l'avance!
J'ai suivi votre solution: Returned est: méthode non définie quantité = » pour []: Array avec ces params: Paramètres: { "commit"=> "cart_update", "_method"=> "put", "authenticity_token" => "CK6to1uGWPszjz8vfL1Er3DLgi8cIMtLxfFb49a4wCE =" "id" => "5", "cart_item" => { "quantité" => "1" "id" => "5" }} –
@JZ J'ai supposé que '#error handling here' signifiait que vous aviez une erreur de gestion. Votre instruction 'select' échoue, elle renvoie donc un tableau vide. Votre script ne fait rien au tableau, donc votre dernière ligne de «increment_inventory_quantity» exécute effectivement ce '[] .quantity = 1' qui échouera bien sûr. –
Merci! Ma balise #error handling est un rappel pour moi de l'ajouter plus tard. –