Rails 4 Update Nested Attributes and avoid Duplicate Information -
i create application whit nested form.
in model bur_audit.
class buraudit < activerecord::base has_many :personal_adits, dependent: :destroy belongs_to :public_entity belongs_to :taking belongs_to :area before_create :validar_entidad_area_reca after_save :llena_tabla_per_buro_audit accepts_nested_attributes_for :personal_adits, allow_destroy: true quincena = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"] calendario = ((yr=date.current.year)-7..yr).to_a include informixqueryhelper def validar_entidad_area_reca entidad = self.public_entity_id puts entidad self.entidad_publica = entidad e = publicentity.find_by "entidad_publica = " + entidad.to_s id = e.id self.public_entity_id = id area = self.area_id puts area self.departamento = area = area.find_by "area = " + area.to_s id = a.id self.area_id = id reca = self.taking_id puts reca self.recaudacion = reca r = taking.find_by "recaudacion = " + reca.to_s id = r.id self.taking_id = id end def llena_tabla_per_buro_audit id = self.id dependencia = self.entidad_publica area = self.departamento recaudacion = self.recaudacion calendario = self.calendario quincena = self.quincena bur_audit_empleado_horario(dependencia,area,recaudacion,id, calendario, quincena) end end before_safe have make connection informix server , run query information need in relation personal adits.
the information save when update attibutes personal adits duplicate records on table.
in controller im trying this
# encoding: utf-8 class burauditscontroller < applicationcontroller include informixqueryhelper before_action :set_bur_audit, only: [:show, :edit, :update, :destroy] respond_to :html, :xml, :json, :pdf, :xls, :csv def index @bur_audits = buraudit.all respond_with(@bur_audits) end def show respond_with(@bur_audit) end def new @bur_audit = buraudit.new respond_with(@bur_audit) end def edit end def create @bur_audit = buraudit.new(bur_audit_params) @bur_audit.save respond_with(@bur_audit) end def update @bur_audit.update(update_bur_audit_params) respond_with(@bur_audit) end def destroy @bur_audit.destroy respond_with(@bur_audit) end def for_auditoria_burocrata puts("preparandose para lanzar") bur_audit_empleado_horario(params[:dependencia], params[:area], params[:recaudacion]) render json: @bur_empleado end def for_entidad_area_id sql = "select a.id, a.description areas a.status = 'a' , a.entidad_publica = '#{params[:public_entity_id]}' , a.fecha_efectiva in (select max(fecha_efectiva) areas a.area = area) order description" @area = activerecord::base.connection.select_rows(sql) @area.map{|id,description|} respond_to |format| format.json { render :json => @area } end end private def set_bur_audit @bur_audit = buraudit.find(params[:id]) end def bur_audit_params params.require(:bur_audit).permit(:id, :titulo, :public_entity_id, :entidad_publica, :area_id, :departamento, :taking_id, :recaudacion, :quincena, :calendario , personal_adits_attributes:[:id, :building_id, :labora_true, :absence_cause_id, :area_funcional, :tiempo_area, :per_cargo, :escolaridad, :cumple_perfil, :reg_asistencia, :horario, :viaja, :frecuencia, :jefe_directo, :funsiones, :regularizado, :observaciones, :sueldo, :_destroy]) end def update_bur_audit_params params.require(:bur_audit).permit(personal_adits_attributes:[:id, :bur_audit_id ,:building_id,:labora_true,:absence_cause_id,:area_funcional,:tiempo_area,:per_cargo,:escolaridad,:cumple_perfil,:reg_asistencia,:horario,:viaja,:frecuencia,:jefe_directo,:funsiones,:regularizado,:observaciones,:sueldo, :_destroy]) end someone know way avoid duplication of information.
it appears comments parameters being passed in post action causing duplicate record created. params mentioned in comment are:
parameters: {"utf8"=>"✓", "authenticity_token"=>"xwnmgrolayrynhsizpbnuk4ip589ozqnddilcusqimc=", "button"=>"", "bur_audit"=>{"titulo"=>"prueba de duplicidad", "public_entity_id"=>"204", "area_id"=>"3011000005001", "taking_id"=>"14", "calendario"=>"2015", "quincena"=>"16", "personal_adits_attributes"=>{"0"=>{"building_id"=>"", "labora_true"=>"si", "absence_cause_id"=>"", "area_funcional"=>"", "tiempo_area"=>"", "per_cargo"=>"", "escolaridad"=>"", "cumple_perfil"=>"", "reg_asistencia"=>"", "horario"=>"8:00-16:00 l-v", "viaja"=>"", "frecuencia"=>"", "jefe_directo"=>"", "funsiones"=>"", etc
notice part starts "personal_adits_attributes"=>{"0"=>. indicates me array of personal_adits fields can passed in. continuation shows "1"=> later in block.
my assumption information being posted form has multiple personal_adits nested in it, created manually user (for example clicking "add personal adit" button). there no sign of personal_adit being instantiated in bur_audits_controller new action or in initialization of buraudit model, guessing manual action creating multiple items.
alternatively, bur_audit/_form.html.erb file instantiating multiple personal_adit instances prior showing nested form.
to validate, add following before form tag @bur audit in form partial.
i expect number greater one, show personal_adit list created. if 0 or 1 dig nested forms see when created. potentially there ui activity causing multiple nested personal_adit forms created. example $(document).on('click'... being registered twice , therefore leading double events single user action.
feel free edit answer or original question additional information if helps.
Comments
Post a Comment