首页 > 解决方案 > 通过验证从另一个控制器视图创建

问题描述

我正在尝试从我的账单显示中创建代理。我不能在我的表单上显示验证错误,我只能闪烁它们。我尝试仅使用@agent、 渲染而不是重定向、在表单中传递账单 id 来制作表单……但我不明白。如何创建代理并返回账单显示视图并在表单中显示我的验证错误?

控制器

bills_Controler.rb

def show
    @bill = Bill.find(params[:id])
    @agent = @bill.agent || Agent.new
    respond_to do |format|
      format.html 
      format.pdf do
        render pdf: @bill.to_filename
              end
      format.zip { send_zip }
    end
end

代理控制器.rb

def create
    @agent = Agent.new
    @bill=Bill.find(params[:bill_id])

    if build_agent(agent_params).save
        flash[:notice] = t('agent.saved')
            redirect_to bill_path (params[:billid])
    else
        #flash[:error] = @agent.errors
        #render 'bills/show'
        redirect_to bill_path(@bill), :flash => { :error => @agent.errors.full_messages.join(', ') }
    end
end

意见

_bill.html.erb

<%= render 'bills/show/agents'%>

_agents.html.erb

<%= simple_form_for [@bill, @agent] do |f| %>
    <%= f.input :name, wrapper_html: { class: 'medium' } %>
    <%= f.input :surname, wrapper_html: { class: 'medium' } %>
    <%= f.input :phone_number, wrapper_html: { class: 'medium' }  %>
    <%= f.button :submit, class: 'button btn-main btn btn-primary'%>
<%end%>

楷模

账单.rb

belongs_to :agent, inverse_of: :bills

代理.rb

has_many :bills, inverse_of: :agents, dependent: :restrict_with_error
validates :name ,presence: true ....

路线

resources :bills, only: [:index, :show, :new, :create, :update] do
    resources :agents, only: [:new, :update,:create]
end

标签: ruby-on-rails

解决方案


为了在字段中显示错误,您需要render show对包含错误的同一对象进行操作:

def show
  # show action code goes here
end

def create
  @agent = Agent.new(agent_params)
  @bill = Bill.find(params[:bill_id])

  if @agent.save 
    # validation fails and  
    # the @agent object contains errors
    @bill.agent = @agent
    flash[:notice] = t('agent.saved')
    redirect_to bill_path(params[:bill_id])
  else
    render :new
    # because the new action contains a form
  end
end

推荐阅读