дублировать результат при изменении события в блоке forms_for

0

Я новичок в Rails.

У меня вложенная форма.

<div id="items">
  <%= f.simple_fields_for :items do |i| %>
      <%= render 'item_fields', :f => i %>
  <% end %>
  <div class="links">
    <%= link_to_add_association '+ produk', f, :items %>
  </div>
</div>

item_fields:

<%= f.select :product_id, Product.all.collect {|p| [p.name, p.id, {'data-unit_cost'=>p.sell_price }]}, { class: 'product-select'} %>
<%= f.input :qty %>
<%= f.input :unit_cost%>
<%= f.input :discount %>
<%= f.number_field :subtotal %>

сценарий:

$(".product-select").change ->
  unit_cost = $('.product-select :selected').data('unit_cost') or 0

Идея заключается в том, что всякий раз, когда выбран product_id, устанавливается значение unit_cost. Дело в том, что он работает только для первой строки вложенной формы, второй и последующих, значение будет дублироваться первой строки.

Любая помощь будет оценена по достоинству.

  • 0
    Не могли бы вы показать свою полную форму предметов, так как идентификатор :unit_cost может отличаться в зависимости от form_for .
Теги:

1 ответ

0

Измените свои _item_fields:

<%= f.select :product_id, Product.all.collect {|p| [p.name, p.id, {'data-unit_cost'=>p.sell_price }]}, {}, { class: 'product-select'} %>

добавьте пустой class: 'product-select' перед class: 'product-select' в качестве :html_option - последний (4-й) параметр f.select, а третий называется :option.

<%= f.input :unit_cost%> #Add an id for selecting element

А также отредактируйте свой скрипт:

$(document).ready ->
  unit_cost = $('#items_items_unit_cost')
  unit_cost.val($('.product-select :selected').data('unit_cost'))
  $(".product-select").change ->
    unit_cost.val($('.product-select :selected').data('unit_cost'))

Я использую rails4, и кажется, что нет simple_fields_for или f.input. Поэтому вместо этого я использую fields_for и f.text_field. Это работает на моем тестовом коде, но я не уверен, может ли он работать для вас. Просто попробуйте:)

  • 0
    Привет, спасибо за комментарий. Я использую гем SimpleForm, поэтому он становится simple_fields_for. Я получил ошибку «неправильное количество аргументов (5 для 2..4)», если я добавил () на выбор. Я добавил id в unit_cost, но это значение unit_cost, все еще дублирующее от первого unit_cost.
  • 0
    Ой, простите. Это не должно быть () , но {} . Я исправил это и, пожалуйста, попробуйте еще раз :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню