Я новичок в ruby по рельсам и созданию веб-приложений и javascript
Мне нужно, чтобы когда изменив или выбрав вид дохода, измените и обновите список, который отображается справа
У меня есть 3 таблицы
Banco
tipo_concept
банковская комиссия
- id
- descr
- monto
- tipo_concept_id
- banco_id
Это мой контроллер
mov_ingresos_controller.rb
class MovIngresosController < ApplicationController
before_action :set_movingreso, except: [:index,:new,:create]
before_action :manager_select
def new
@mov_ingreso = MovIngreso.new
@mov_principal = @mov_ingreso.build_mov_principal
end
def index
@mov_ingresos = MovIngreso.all
@mov_ingresos = MovIngreso.order('date_set DESC').reorder('id DESC')
end
def edit
end
def update
@mov_ingreso.mov_principal.date_update = Date.today
if @mov_ingreso.update_attributes(movingreso_params)
flash[:success]= "Ingreso actualizado"
redirect_to action: 'index'
end
end
def create
@mov_ingreso = MovIngreso.new (movingreso_params)
@mov_ingreso.mov_principal.user_id = current_user.id
@mov_ingreso.mov_principal.date_update = Date.today
if @mov_ingreso.save
redirect_to action: 'index'
else
render :new
end
end
def destroy
@mov_ingreso.destroy
redirect_to action: 'index'
end
def manager_select
if params[:mov_principal]
@bankcomissions = Bankcommission.find(params[:mov_principal][:id_tipo])
end
end
private
def set_movingreso
@mov_ingreso = MovIngreso.find(params[:id])
end
def movingreso_params
params.require(:mov_ingreso)
.permit(:debe,
mov_principal_attributes:[:id,:referencia,:id_tipo,:banco_id,:date_set,:date_update,:user_id,:_destroy,:nivele_id,])
end
end
форма
_form. html .erb
<%=form_for(@mov_ingreso, remote: true, :html => {:class => 'form-horizontal formulario '}) do |ingreso| %>
<% @mov_ingreso.errors.full_messages.each do |message| %>
<div class="be-red white top-space">
* <%= message %>
</div>
<% end %>
<%= ingreso.fields_for :mov_principal do |f| %>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> <%= f.label :referencia, "Referencia" %> </label>
<div class="col-sm-10">
<%= f.text_field :referencia, class: 'form-control', placeholder: "N° DE REFERENCIA" %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :id_tipo, "Tipo" %> </label>
<div class="col-sm-10">
<%= f.collection_select(:id_tipo, TipoConcepto.where(:forma => "1"), :id, :tipo,{:prompt => "SELECCIONE EL TIPO DE INGRESO"}, html_options = {class: 'custom-select tipoconcep ,:onchange => "cambiarajax"'}) %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :nivele_id, "Niveles" %> </label>
<div class="col-sm-10">
<%= f.collection_select(:nivele_id, Nivele.where(:tipo_movimiento_id => "1"), :id, :descripcion,{:prompt =>"SELECCIONE EL NIVEL"} ,{class: 'custom-select'} ) %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :id_banco, "Banco" %> </label>
<div class="col-sm-10">
<%= f.collection_select(:banco_id, Banco.all, :id, :nombre,{:prompt =>"SELECCIONE EL BANCO"} ,{class: 'custom-select', id: 'selectbanco', :onchange => "cambiarajax"} ) %>
</div>
</div>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= f.label :date_set, "Fecha" %> </label>
<div class="col-sm-10">
<%= f.text_field :date_set, class: 'form-control', data: { provide: "datepicker",
'date-format': 'dd-mm-yyyy',
'date-autoclose': 'true',
'date-today-btn': 'linked',
'date-today-highlight': 'true'}, value: Time.now.strftime('%d-%m-%Y') %>
</div>
</div>
<% end %>
<div class="form-group row" >
<label class="col-sm-2 col-form-label"> <%= ingreso.label :debe, "Monto" %> </label>
<div class="col-sm-10">
<%= ingreso.text_field :debe, class: 'form-control montobase' , :id => "debe", placeholder: "MONTO DE INGRESO" %>
</div>
</div>
<div class = "field">
<%= ingreso.submit "Guardar", class:"guardo btn btn-primary" %>
</div>
<%end%>
Это список, который мне нужно изменить при обновлении вида дохода
_totalform. html .erb
<h4 id="totalp" class="page-title totale">0.00</h4>
<div class="table-responsive">
<table class="table table-borderless table-hover table-centered m-0 listacom " id="tabla1">
<thead class="thead-light text-left">
<tr>
<th scope="col">Comision</th>
<th scope="col">%</th>
<th scope="col">Total</th>
</tr>
</thead>
<tbody class = "listados" id ="listadoso">
<% if @bankcomissions.blank? %>
<tr>
<td width="100%">Descuento por comisiones</td>
</tr>
<% else %>
<% @bankcomissions.each do |ingresos| %>
<tr class="text-left listado " id="prueba5">
<td><%=ingresos.descrip %></td>
<td class="porcomision" id=porocomision><%= ingresos.pvalue %> </td>
<td class="totalcomision" id= "totalcom"><%= number_with_precision( ingresos.totalxcom, precision: 2, separator: ',', delimiter: '.' ) %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
</div>
_bodyform. html .erb
<div class="card-box ">
<h4 class="header-title text-center"><%= tipooper%> </h4><br>
<% if cuerpo == 'N' %>
<%= render "form" %>
<% else %>
<%= render "totalform" %>
<% end %>
</div>
Я пытался сделать запрос Ajax, я мало что знаю об этой топи c или о том, как подать заявку это в рельсах, но проводя исследование я сделал что-то вроде этого
mov_ingresos.coffee
$ ->
$('#debe').keyup (e) ->
share = parseFloat($(this).val())
total =0
console.log(share)
$('.listado').each (i, el) ->
if isNaN(share)
val =0
else
val = share * (Number($('.porcomision', el).html())/100)
total = total + val
num = val.toFixed(2).replace('.', ',').replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.')
$('.totalcomision', el).html num
$("#totalp").text total
return
cambiarajax = ->
tipoid = $(this).val()
$.ajax
type: 'POST'
url: 'mov_ingresos/select_total'
data: id_tipo: tipoid
return
select_total. js .erb
$('#listadoso').html('<%= escape_javascript render(:partial =>"totalform")%>');
This не работает, помогите !!! Спасибо