% # Este parcial genera un control para un campo de un registro. # Supone que se ha definido: # @registro con el registro que se edita # Recibe los siguientes parámetros obligatorios: # f Formulario # atr Campo del registro cuyo control será generado # Y los siguientes opcionales # atributos_externos Diccionario con atributos HTML para la envoltura # div del control # atributos_internos Diccionario con atributos HTML para el control # opciones Diccionario con opciones sus claves posibles son: # chosen Por omisión se usa chosen en campos de selección, # pero si es falso no se emplea chosen. # habilitar Por omisión el campo está habilitado. Si esta # opción es false se presenta deshabilitado. # etiqueta Por omisión se presenta etiqueta. Si esta opción # es false no se presenta. # %> <% if @registro.nil? %> @registro no puede ser nil. Debe ser objeto que se edita. <% return %> <% end %> <% if atr.nil? %> atr no puede ser nil. Debe ser atributo por editar. <% return %> <% end %> <% if f.nil? %> f no puede ser nil. Debe ser formulario. <% return %> <% end %> <% atexternos = {} %> <% if defined?(htmlexterno) %> <% atexternos.merge!(htmlexterno) %> <% end %> <% if defined?(atributos_externos) %> <% atexternos.merge!(atributos_externos) %> <% end %> <% atinternos = {} %> <% if defined?(atributos_internos) %> <% atinternos = atributos_internos %> <% end %> <% alf = @registro.class.asociacion_llave_foranea(atr) %> <% vatr = atr.to_s.gsub(/[^a-z_A-Z0-9]/, '') %> <% rtavatr = clase.pluralize.underscore + "/campo_#{vatr}" %> <% (ri, rm, rd)=clase.pluralize.underscore.rpartition("/") %> <% regatr = atr.class == Hash ? @registro.send(atr.keys.first) : @registro.send(atr) %> <% valorp = Msip::ModeloHelper.poromision_sf( params, atr, regatr) %> <% #byebug %> <% if alf # Es llave Foranea %> <% n = alf.name %> <% nclase = alf.class_name.constantize %> <% col = Msip::ModeloHelper.opciones_tabla_basica(nclase, f, n) %> <% desh= false %> <% nosel = {} %> <% #puts "OJO atr=#{atr}, valorp=#{valorp}" %> <% if defined?(opciones) && opciones.keys && opciones.keys.include?(:habilitar) && opciones[:habilitar] === false %> <% desh = true %> <% nosel = { onfocus: "this.defaultIndex=this.selectedIndex;", onchange: "this.selectedIndex=this.defaultIndex;" } %> <% # Solución de https://github.com/heartcombo/simple_form/issues/1513 %> <% end %> <% if !defined?(opciones) || !opciones.keys.include?(:chosen) || opciones[:chosen] %> <% atinternos.merge!({ class: desh ? '' : 'chosen-select' }) %> <% end %> <% atinternos.merge!(nosel) %> <% opassoc = { collection: col.order(nclase.send(:orden_presenta_nombre)), label_method: :presenta_nombre, value_method: :id, disabled: desh, include_blank: true, input_html: atinternos, wrapper_html: atexternos, } %> <% if @registro.respond_to?(n) && @registro.send(n) && @registro.send(n).id %> <% opassoc[:selected] = @registro.send(n).id %> <% else %> <% opassoc[:selected] = valorp %> <% end %> <%= f.association n, opassoc %> <% elsif @registro.class.asociacion_combinada(atr) %> <% #byebug %> <% r = @registro.class.asociacion_combinada(atr) # Tabla Combinada %> <% if lookup_context.find_all(r.name.to_s + '_campos', [], true).any? %> <% # Suponemos que tiene un accepts_nested_attributes_for %> <% nd = r.class_name.constantize.human_attribute_name(r.name.to_s) %>