我使用嵌套表单创建一个应用程序。
在我的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
a = 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我必须与informix Server建立连接并运行查询以获取我在与个人Adits的关系中所需的信息。
信息保存完美,但是当我更新个人广告的资料时,会在桌面上复制我的记录。
在我的控制器中尝试这个
# 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
from areas a
where a.status = 'A'
and a.entidad_publica = '#{params[:public_entity_id]}'
and a.fecha_efectiva in (select max(fecha_efectiva)
from areas
where a.area = area)
order by description"
@area = ActiveRecord::Base.connection.select_rows(sql)
@area.map{|id,description|}
respond_to do |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
有人知道如何避免重复我的信息。
答案 0 :(得分:0)
从评论中可以看出,POST操作传入的参数会导致创建重复记录。评论中提到的参数是:
参数:{“utf8”=&gt;“✓”, “authenticity_token”=&gt; “中XWNmgRoLAyRYnHsIZPbnuk4ip589ozqNDDiLCUSQIMc =”, “button”=&gt;“”,“bur_audit”=&gt; {“titulo”=&gt;“Prueba de Duplicidad”, “public_entity_id”=&gt;“204”,“area_id”=&gt;“3011000005001”, “taking_id”=&gt;“14”,“calendario”=&gt;“2015”,“quincena”=&gt;“16”, 的 “personal_adits_attributes”=&GT; { “0”=&GT; 强> { “building_id”=&gt; “中”, “labora_true”=&gt;“SI”,“absence_cause_id”=&gt;“”,“area_funcional”=&gt;“”, “tiempo_area”=&gt;“”,“per_cargo”=&gt;“”,“escolaridad”=&gt;“”, “cumple_perfil”=&gt;“”,“reg_asistencia”=&gt;“”,“horario”=&gt;“8:00-16:00 L-V“,”viaja“=&gt;”“,”frecuencia“=&gt;”“,”jefe_directo“=&gt;”“, “funsiones”=&gt;“”等等
注意启动"personal_adits_attributes"=>{"0"=>
的部分。这向我表明可以传入一系列personal_adits字段。延续可能会在块后面显示"1"=>
。
我的假设是,表单发布的信息中嵌入了多个personal_adits,由用户手动创建(例如,单击“添加个人adit”按钮)。没有迹象表明personal_adit在 bur_audits_controller 新操作或 BurAudit 模型的初始化中被实例化,所以我猜它是创建多个项目的手动操作。
或者, bur_audit / _form.html.erb 文件在显示嵌套表单之前实例化多个personal_adit实例。
要最终验证,请在表单partial。
中的@bur audit的表单标记之前添加以下内容我希望这将是一个大于1的数字,这将显示personal_adit列表已经创建。如果它是0或1,那么深入嵌套表单以查看它们何时被创建。可能有一个UI活动有效地导致创建多个嵌套的personal_adit表单。例如,$(document).on('click'...
被注册两次,因此导致单个用户操作的双重事件。
如果有帮助,请随时编辑此答案或原始问题以及其他信息。