【问题标题】:To maintain data in a form after doing a validation in rails在 Rails 中进行验证后维护表单中的数据
【发布时间】:2017-04-25 16:31:07
【问题描述】:

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

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

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

在陷入异常的那一刻,我返回表单,但字段为空 我想要的是能够在发送消息后保留数据

This is part of the form after the validation

【问题讨论】:

标签: ruby-on-rails forms ruby-on-rails-3


【解决方案1】:

一旦您将某些内容放入mensaje,repond 就会重定向到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

【讨论】:

    【解决方案2】:
    【解决方案3】:

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

    在那之后,您的控制器将减少并且只决定if @farm.save(正如https://stackoverflow.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 约定),它将自动显示错误和旧值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2018-09-28
      • 2014-06-15
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多