Я знаю, это звучит запутанно (и это так), поэтому позвольте мне объяснить. Прежде всего, это не мой код, поэтому я думаю, что было бы слишком медленно кодировать его снова другим способом.
Контекст: это форма проверки Spree, и в представлении корзины я могу применить купоны на текущую корзину. Однако количество товара изменяется через числовое поле только в представлении. Это означает, что мне нужно обновить корзину перед применением купона, в противном случае он будет считаться только как один товар, даже если я поставлю 10 как количество. Проблема в том, что я не знаю, как получить доступ к этому полю, чтобы обновить количество (Spree :: Order.find (this_order) .line_items.find (this_line_item) .quantity).
Важные части представления выглядят так:
<%= form_for @order, url: update_cart_path, html: { id: 'update-cart' } do |order_form| %>
<%= render partial: 'form', locals: { order_form: order_form } %>
# Inside _form partial:
<%= render partial: 'spree/orders/line_item',
collection: order_form.object.line_items,
locals: { order_form: order_form } %>
# Inside _line_item partial:
<%= order_form.fields_for :line_items, line_item do |item_form| %>
<%= item_form.number_field :quantity,
min: 1,
class: "form-control line_item_quantity",
id: "quantity"+ variant.id.to_s,
size: 5 %>
Как вы можете видеть, есть форма form_for, которая рендерит частичку, которая рендерит другую частичку с коллекцией, внутри которой есть fields_form. В отображаемом HTML поле появляется с именем order[line_items_attributes][0][quantity]
, но когда я делаю params[:order].inspect
, оно не показывает :line_items_attributes
или что-либо связанное с этим полем. Как я могу получить доступ к этому значению из контроллера заказов?
Спасибо.