2011-03-05 6 views
1

J'ai report_controller où j'ai deux objets, @report et @reporte, et je veux enregistrer les deux objets dans la base de données. Lorsque la validation échoue, je souhaite que les champs soient remplis sous forme rendue.Remplir le formulaire après la validation échoue

Je ne peux pas utiliser seulement @report = ReportMain.new(params[:report_main]) parce que j'ai deux objets et un seul objet params.

J'utilise exportnew action pour montrer le formulaire, et encreate pour enregistrer ce formulaire.

Il existe un moyen simple d'obtenir un formulaire rempli?

ReportController:

class ReportController < ApplicationController 
    before_filter :authenticate_user! 
    before_filter :load 
    layout "application" 

    def load 
    @company = Company.find_by_id(current_user.company_id) 
    @date = Date.today 
    @report = ReportMain.new 
    @reporte = ReportE.new 
    end 

    def index 
    list 
    render("list") 
    end 

    def list 
    @reports = ReportMain.all 
    end 

    def exportnew 
    render("ennew") 
    end 

    def encreate 

    @report = ReportMain.new 
    @reporte = ReportE.new 
    @reportparam = params[:report_main] 


    @report.waste_id = params[:waste][:code] 
    @report.warehouse_id = Warehouse.find_by_user_id(current_user.id).id 
    @report.user_id = current_user.id 
    @report.company_id = current_user.company_id 
    @report.amount = @reportparam[:amount] 
    @report.isimport = false 
    @report.isfinished = false 
    @report.reportnumber = ReportMain.where(:company_id => current_user.company_id).count.to_i+1 
    if @report.save 
     @reporte.report_main_id = @report.id 
    else 
     @report_main = @report 
     render("etnew") 
     return 
    end 

    @reporte.vrstaotpada = params[:vrstaotpada] 
    @reporte.nacinpakovanja = params[:nacinpakovanja] 
    @reporte.ispitivanjebroj = @reportparam[:ispitivanjebroj] 
    @reporte.datumispitivanja = @reportparam[:datumispitivanja] 
    @reporte.q_pripadnost = @reportparam[:q_pripadnost] 
    @reporte.datumpredaje = @date 

    if @reporte.save 
     redirect_to(:action => 'show', :id => @reporte.id) 
     flash[:notice] = "Izveštaj je uspešno kreiran." 
    else 
     @report_main = @report 
     render("etnew") 
    end 
    end 



    def show 
    @report = ReportMain.find(params[:id]) 
    @warehouse = @report.warehouse.name 
    end 

end 

View commence par (c'est énorme HTML):

<%= form_for(:report_main, :url => {:action => 'encreate'}) do |f| %> 

Répondre

0

Puisque vous voulez que votre formulaire pour obtenir rempli après validation échoue, je vous suggère de rendre votre de soumettre par AJAX. Il y a un plugin jQuery qui peut aider http://jquery.malsup.com/form/

Questions connexes