Изучение рельсов и что-то пахнет немного смешно.
У меня есть следующая форма для обновления количества в корзине.
<% 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 %>
В своем действии update_cart я перебираю существующие элементы корзины и устанавливаю новое количество:
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
У меня нет контроллера интерфейса REST для тележек или корзин. Есть ли лучший способ справиться с этой глубокой структурой данных params? Выражение params[:cart][:cart_item][item.id.to_s][:quantity].to_i
кажется мне опасным для неверных данных формы.