Update fields using jquery and gem cocoon

0

I'm using the cocoon gem of rails for child form creation. When creating the child form, a field called barcode is read and, via ajax, I get the product information and fill in the form fields. This is working correctly, however, when saving, the data is not persisted in the database. How to do this correctly?

order.rb

class Order < ActiveRecord::Base
   has_many :details, dependent: :destroy
   belongs_to :customer
   accepts_nested_attributes_for :details, :reject_if => :all_blank, :allow_destroy => true
   validates :customer_id,
             :presence => true
end

details.rb

class Detail < ActiveRecord::Base
   belongs_to :order
end

_form.html.erb

<%= simple_form_for(@order) do |f| %>
   <%= f.error_notification %>
   <div class="form-inputs">
     <div class="row">
       <div class="small-4 columns">
         <%= f.association :customer, collection:   Customer.order('nome ASC'), label_method: :nome, value_method: :id, include_blank: false, prompt: "Selecione", label: "Cliente:", class: "right inline cliente" %>
  </div>
  <div class="small-2 columns">
    <p>Valor Pedido:</p>
    <span class="valor_total"> R$ 0,00</span>
  </div>
  <div class="small-2 columns end">
    <p>Total Ítens:</p>
    <span class="item_total"></span>
  </div>
</div>
<%= f.input :valor_total, :as => :hidden, input_html: { class: 'valor_total_ror' } %>
<%= f.input :item_total, :as => :hidden, input_html: { class: 'item_total_ror' } %>
<%= f.input :order_num, :as => :hidden, input_html: { class: 'ordem_num_ror' } %>
<div class="row">
 <div class="small-12 columns">
 <hr/>
    <div class="itens">
          <div id="order_details">
            <%= f.simple_fields_for :details do |detail| %>
                 <%= render "detail_fields", :f => detail %>
               <% end %>
          </div>
    </div>
  </div>
</div>
<div class="row">
  <div class="small-12 columns">
    <div class="form-actions">
      <%= link_to_add_association '+', f, :details, :class => "button tiny radius" %><br />
    </div>
  </div>
</div>
<div class="row">
  <div class="small-2 columns end">
    <%= f.button :submit, "Salvar" %>
  </div>
</div>
   

_details_fields.html.erb

<div class="nested-fields">
<div class="row">
    <div class="small-3 columns end leitor">
        <form action="#" method="post">
                    Código de barras
                    (<a href="http://zxing.appspot.com/scan?ret=http://www.auere.com.br/testes/barcode.php?codigo={CODE}">Leitor</a>):
                    <input class = "cod_barras" type="text" name="cod_barras" value="" />
                </form>
    </div>
</div>
<div class="row">
<hr/>
  <%= f.input :order_id, :as => :hidden, input_html: { class: 'order_id_ror' } %>
  <div class="small-1 columns">
    <%= f.input :cod_produto, label: "Produto", input_html: { class: 'cod_produto_ror' } %>
  </div>
  <%= f.input :desc_produto,:as => :hidden, input_html: { class: 'desc_produto_ror' } %>
  <%= f.input :cod_cor,:as => :hidden, input_html: { class: 'cod_cor_ror' } %>
  <div class="small-2 columns">
    <%= f.input :desc_cor,label: "Cor", input_html: { class: 'desc_cor_ror' } %>
  </div>
  <div class="small-1 columns">
      <%= f.input :desc_tamanho,label: "Tam", input_html: { class: 'desc_tamanho_ror' } %>
  </div>
  <div class="small-2 columns">
      <%= f.input :preco,label: "Preço",input_html: { class: 'preco_ror' } %>
  </div>
  <div class="small-1 columns">
      <%= f.input :quantidade,label: "Qtd", input_html: { class: 'quantidade_ror' } %>
  </div>
  <div class="small-2 columns end">
      <%= f.input :total,label: "Total",input_html: { class: 'total_ror' } %>
  </div>
  <div class="small-1 columns end">
    <%= link_to_remove_association "-", f, :class => "button tiny alert" %>
  </div>
  <hr/>
</div>

order.js

jQuery(document).ready(function($)
{
$(document).on("focusout",".cod_barras",function()  {
  barcode = $(this).val();
  if (barcode === "") return;
    var parent = $(this).parents('.nested-fields');
    var cod_produto = $(parent).find('.cod_produto_ror');
    var desc_produto = $(parent).find('.desc_produto_ror');
    var cod_cor = $(parent).find('.cod_cor_ror');
    var desc_cor = $(parent).find('.desc_cor_ror');
    var desc_tamanho = $(parent).find('.desc_tamanho_ror');
    var input_preco = $(parent).find('.preco_ror');
    var input_qtd = $(parent).find('.quantidade_ror');
    var input_total = $(parent).find('.total_ror');
  $.ajax({
  type: "GET",
  url: "/consulta_produto",
  dataType: "json",
  data: { barcode: barcode},
  complete: function() {},
  success: function(response)
  {
        // Os valores estão sendo atribuidos corretamente
        // mas nao estão sendo salvos no banco de dados
        $(cod_produto).val(response.resultado.cod_produto);
        $(desc_produto).val(response.resultado.desc_produto);
        $(cod_cor).val(response.resultado.cod_cor);
        $(desc_cor).val(response.resultado.desc_cor);
        $(desc_tamanho).val(response.resultado.desc_tamanho);
        $(input_preco).val(response.resultado.preco);
        $(cod_produto).prop( "disabled", true );
        $(desc_produto).prop( "disabled", true );
        $(cod_cor).prop( "disabled", true );
        $(desc_cor).prop( "disabled", true );
        $(desc_tamanho).prop( "disabled", true );
        $(input_preco).prop( "disabled", true );
        $(input_total).prop( "disabled", true );
        $(input_qtd).focus();
  }
});
});
$(document).on("focusout",".quantidade_ror",function()  {
  quantidade_ror = $(this).val();
  if (quantidade_ror === "") return;
    var parent = $(this).parents('.nested-fields');
    var preco = $(parent).find('.preco_ror');
    preco_final = preco.val();
    var total = $(parent).find('.total_ror');
    $(total).prop( "disabled", true );
    var resultado = quantidade_ror * preco_final;
    $(total).val(resultado);
});
});
    
asked by anonymous 23.02.2016 / 18:50

0 answers