2017-04-25 48 views
0

我验证我的形式,但在发送错误消息清除域之后维持在表单数据,我想对数据进行保存,这样我只是完成我需要为了做在轨验证

我的那些有这样的代码在控制器:

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 
    [email protected] 
    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

+0

窗体是什么样的? – Iceman

+0

看看http://stackoverflow.com/questions/2916995/keep-form-fields-filled-after-an-error-ror – Rakesh

+0

@ Rakesh 它的工作原理,但它并没有显示我的错误信息 – Mike

回答

0

只要你把东西放到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 
0

验证不控制器的归属。将您的验证放入模型(业务逻辑)中。这是一个很好的验证指南: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约定),它将自动显示错误和旧值。