Les rails d'apprentissage et quelque chose sent un peu drôle.Rails formes aide: traitant des formes complexes et params (c'est mon premier jour avec des rails)
J'ai le formulaire suivant pour mettre à jour les quantités dans un panier.
<% form_for(:cart, @cart.items, :url => { :action => "update_cart" }) do |f| %>
<table>
<tr>
<th>Item</th>
<th>Quantity</th>
<th>Price</th>
</tr>
<% for item in @cart.items %>
<% f.fields_for item, :index => item.id do |item_form| %>
<tr>
<td><%=h item.title %></td>
<td><%=item_form.text_field :quantity, :size => 2 %>
<span>@ <%=h number_to_currency(item.item_price) %></span></td>
<td><%=h number_to_currency(item.line_price) %></td>
</tr>
<% end %>
<% end %>
<tr>
<td colspan="2">Total:</td>
<td><%=h number_to_currency(@cart.total_price) %></td>
</tr>
</table>
<%=submit_tag 'Update Cart' %>
<% end %>
Dans mon action update_cart, j'itérer les articles de panier existants et définir la nouvelle quantité:
def update_cart
@cart = find_cart
@cart.items.each do |item|
quantity = params[:cart][:cart_item][item.id.to_s][:quantity].to_i
@cart.update_quantity_for(item, quantity)
end
redirect_to :action => 'cart'
end
Je n'ai pas un contrôleur d'interface REST pour les chariots ou les articles de panier. Existe-t-il une meilleure façon de traiter cette structure de données params profonde? L'expression params[:cart][:cart_item][item.id.to_s][:quantity].to_i
me semble dangereuse pour les données de formulaire invalides.
En guise de note rapide, 'pour item dans @ cart.items.each' est inutile, vous pouvez simplement utiliser' pour item dans @ cart.items' ou '@cart.items.each do | item | '. – jtbandes
@jtbandes vous avez raison, merci. –