Я новичок в 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. Дело в том, что он работает только для первой строки вложенной формы, второй и последующих, значение будет дублироваться первой строки.
Любая помощь будет оценена по достоинству.
Измените свои _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
. Это работает на моем тестовом коде, но я не уверен, может ли он работать для вас. Просто попробуйте:)
()
, но {}
. Я исправил это и, пожалуйста, попробуйте еще раз :)
:unit_cost
может отличаться в зависимости отform_for
.