2017-04-25 75 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約定),它將自動顯示錯誤和舊值。