在 rails 中进行验证后维护表单中的数据

To maintain data in a form after doing a validation in rails

我正在验证我的表单,但发送错误消息会清除字段,我希望保留数据以便我只完成我需要的那些

我在控制器中有这段代码:

def create
mensaje=""
@farm = Farm.new(params[:farm])
if @farm.nombre==""  || !valid_prescence?(@farm.nombre)
  mensaje="Favor de capturar los datos que se encuentran como requeridos"
else
  @buscar=Farm.where(nombre: params[:farm][:nombre], tipo: params[:farm][:cliente_id])
  if @buscar.any?
    mensaje="La finca "+params[:farm][:nombre]+" ya se encuentra registrada en el sistema, favor de verificar."
  end
end

respond_to do |format|
  if mensaje !=""
    format.html { redirect_to new_farm_path, notice: mensaje }
    format.json { render json: @farm.errors, status: :unprocessable_entity }
  else
    if@farm.save
    format.html { redirect_to @farm, notice: 'Finca creada correctamente.' }
    format.json { render json: @farm, status: :created, location: @farm }
  else
    format.html { render action: "new" }
    format.json { render json: @farm.errors, status: :unprocessable_entity }
  end
end end end

在出现异常的那一刻returns我进入了表格但字段为空 我想要的是发送消息后能够保留数据

This is part of the form after the validation

只要您在 mensaje 中输入内容,响应就会重定向到 new 操作,这就是表单为空的原因。你必须清除控制器,那些验证不属于那里,我只为你做了一些工作。

def create
  @farm = Farm.new(params[:farm])
  if @farm.nombre == ""  || !valid_prescence?(@farm.nombre)
    flash[:notice] = "Favor de capturar los datos que se encuentran como requeridos"
  else
    @buscar = Farm.where(nombre: params[:farm][:nombre], tipo: params[:farm][:cliente_id])
    if @buscar.any?
      flash[:notice] = "La finca #{params[:farm][:nombre]} ya se encuentra registrada en el sistema, favor de verificar."
    end
  end

  respond_to do |format|
    if @farm.save
      format.html { redirect_to @farm, notice: 'Finca creada correctamente.' }
      format.json { render json: @farm, status: :created, location: @farm }
    else
      format.html { render action: "new" }
      format.json { render json: @farm.errors, status: :unprocessable_entity }
    end
  end
end

要在表单上显示错误,请查看 or http://railscasts.com/episodes/211-validations-in-rails-3

验证不属于控制器。将您的验证放入模型(业务逻辑)中。这是关于验证的优秀指南:http://guides.rubyonrails.org/active_record_validations.html

之后,您的控制器将减少并仅决定 if @farm.save(如 https://whosebug.com/users/336392/thomas-r-koll 所示)。

def create
  @farm = Farm.new(params[:farm])

  respond_to do |format|
    if @farm.save
      format.html { redirect_to @farm, notice: 'Finca creada correctamente.' }
      format.json { render json: @farm, status: :created, location: @farm }
    else
      format.html { render action: "new" }
      format.json { render json: @farm.errors, status: :unprocessable_entity }
    end
  end
end

在视图中看到您的表单代码也很有趣。您应该知道所有值以及来自验证的错误消息都在您的@farm 实例变量中。如果您正确编写表单(即遵循标准 Rails 约定),它将自动显示错误和旧值。