Ruby on rails 3 验证失败后填充表单

Ruby on rails 3 验证失败后填充表单,ruby-on-rails-3,forms,Ruby On Rails 3,Forms,我有报表控制器,其中有两个对象,@report和@report,我想将这两个对象都保存在数据库中。当验证失败时,我希望以呈现形式填充字段 我不能只使用@report=ReportMain.new(params[:report\u main]),因为我有两个对象和一个params对象 我使用exportnew操作显示表单,并使用encreate保存此表单 有一些简单的方法来填充表单? ReportController: class ReportController < Application

我有报表控制器,其中有两个对象,@report和@report,我想将这两个对象都保存在数据库中。当验证失败时,我希望以呈现形式填充字段

我不能只使用
@report=ReportMain.new(params[:report\u main])
,因为我有两个对象和一个params对象

我使用exportnew操作显示表单,并使用encreate保存此表单

有一些简单的方法来填充表单?

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
<%= form_for(:report_main, :url => {:action => 'encreate'}) do |f| %>
class ReportControllercurrent\u user.company\u id).count.to\u i+1
如果@report.save
@reporte.report\u main\u id=@report.id
其他的
@report_main=@report
渲染(“etnew”)
回来
终止
@reporte.vrstaotpada=参数[:vrstaotpada]
@reporte.nacinpakovanja=参数[:nacinpakovanja]
@reporte.ispitivanjebroj=@reportparam[:ispitivanjebroj]
@reporte.datumispitivanja=@reportparam[:datumispitivanja]
@reporte.q_pripadnost=@reportparam[:q_pripadnost]
@reporte.datumpredaje=@date
如果@reporte.save
重定向到(:action=>'show',:id=>@reporte.id)
flash[:notice]=“Izveštaj je uspešno kreiran。”
其他的
@report_main=@report
渲染(“etnew”)
终止
终止
def秀
@report=ReportMain.find(参数[:id])
@仓库=@report.warehouse.name
终止
终止
视图以(巨大的HTML)开头:

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
<%= form_for(:report_main, :url => {:action => 'encreate'}) do |f| %>
{:action=>'encreate})do | f |%>

由于您希望表单在验证失败后填充,因此我建议您通过AJAX提交表单。有一个jQuery插件可以提供帮助