Je viens de ramasser le développement Web Agile avec Rails 3rd Ed., Et je vais à travers les chapitres de l'application de dépôt, je suis en train de créer une simple fonction de quantité d'édition, et supprimer la fonction. J'ai eu de la chance avec la fonction de suppression mais pas de chance avec la fonction de modification de quantité. Je vais fournir beaucoup d'informations, alors s'il vous plaît ne vous sentez pas débordé. J'ai trouvé que c'était un problème difficile.problèmes de fonction de quantité simple, panier
Pour add_to_cart.html.erb
<div class="cart-title">Your cart</div>
<table>
<% for item in @cart.items %>
<tr>
<td><% form_for @cart.items, :url => {:action => "cart_update", :id => "#{item.getinventoryid}"} do |f| %>
<%= f.text_field :quantity, :size => '3' %>
<%= f.hidden_field :id, :value => "#{item.getinventoryid}" %>
<%= f.submit 'cart_update' %>
<% end %></td>
<td><%=h item.quantity %> ×</td>
<td><%=h item.title %></li></td>
<td><%=h item.description %></td>
<td class="item-price"><%= number_to_currency(item.price) %></td>
<td><%= link_to 'remove', {:controller => 'inventories', :action => 'remove_cart_item', :id => "#{item.getinventoryid}"} %></td>
</tr>
<% end %>
<tr class="total-line">
<td colspan="4">Total</td>
<td class="total-cell"><%= number_to_currency(@cart.total_price) %></td>
</tr>
</table>
<%= button_to "Checkout", :action => 'checkout' %>
<%= button_to 'Empty cart', :action => 'empty_cart' %>
inventories_controller:
def cart_update
@inventory = Inventory.find(params[:id])
@cart = find_cart
@cart.increment_inventory_quantity(params[:inventory])
end
def remove_cart_item
inventory = Inventory.find(params[:id])
@cart = find_cart
@cart.remove_inventory(inventory)
redirect_to_index("The item was removed")
end
modèle Cart.rb
attr_accessor :items
def increment_inventory_quantity(id, quantity)
inventory_to_increment = @items.select{|item| item.inventory == inventory}
# We do this because select will return an array
unless product_to_increment.empty?
inventory_to_increment = inventory_to_increment.first
else
# error handling here
end
inventory_to_increment.quantity = quantity
end
def remove_inventory(inventory)
@items.delete_if {|item| item.inventory == inventory }
end
modèle cart_item.rb
attr_accessor :inventory, :quantity
def getinventoryid
@inventory.id
end
Cela produit des résultats étranges:
Notez la quantité apparaît dans les deux articles de ma boucle (# Échouer). Lorsque je soumets le formulaire ArgumentError dans InventoriesController # cart_update erreur nombre incorrect d'arguments (1 pour 2) est retourné. Paramètres en cours de transmission:
{"commit"=>"cart_update",
"_method"=>"put",
"authenticity_token"=>"sH1tWXTJPltpSq5XaAkww7259IR5ZiflnqSFB2Zb0IY=",
"id"=>"50",
"cart_item"=>{"quantity"=>"16",
"id"=>"50"}}
Salut JZ - quelques questions. Premièrement, comment @inventory est-il défini dans le modèle cart_item? Deuxièmement, pouvez-vous fournir plus d'informations sur le "mauvais nombre d'arguments" erreur? Cela aiderait à savoir quelle méthode jetait cette erreur. Merci! –
Salut Jamie, j'ai mis à jour l'erreur ci-dessus; l'erreur provient de la méthode cart_update. Le correctif ci-dessous a fonctionné en termes de correction des unités correctes affichées, mais ma méthode produit toujours le mauvais nombre d'arguments erronés. En termes de @Inventory dans mon cart_item: def initialize (inventaire) \t \t @inventory = inventaire \t \t @Quantity = 1 fin –