错误" param丢失或值为空:personas_x_tipos_persona"

时间:2016-06-05 06:32:14

标签: ruby-on-rails ruby params

我从铁道开始,我有这个错误,我无法解决..

  

错误 - 缺少参数或值为空:   personas_x_tipos_persona

控制器

class PersonasController < ApplicationController
  def create_cliente
    @cliente = Persona.new(persona_params)
    @personas_x_tipos_personas = Persona.new(tipos_personas_params)
    if @cliente.save
      redirect_to show_clientes_path
    else
      render :new_cliente
    end
  end
  private
  def persona_params
    params.require(:persona).permit(:nombre, :apellido, :direccion, :ruc, :contacto, :email)
  end
  def tipos_personas_params
    params.require(:personas_x_tipos_persona).permit(:linea_credito)
  end
end

视图

<div>
  <%= form_for :persona ,:url => add_cliente_path, :html => {:method => :post} do |f|%>
    <% @cliente.errors.full_messages.each do |message| %>
      <div class="alert alert-danger" margin-top:10px">
        * <%=message%>
      </div>
    <% end %>

    <%= f.text_field :nombre, placeholder: "Nombre del Cliente"%>
    <%= f.text_field :apellido, placeholder: "Apellido del Cliente"%>
    <%= f.text_field :direccion, placeholder: "Direccion del Cliente"%>
    <%= f.text_field :ruc, placeholder: "RUC del Cliente"%>
    <%= f.text_field :contacto, placeholder: "Contacto del Cliente"%>
    <%= f.email_field :email, placeholder: "Email del Cliente""%>

      <%= f.fields_for :personas_x_tipos_persona do |pxp|%>
        <%= pxp.number_field :linea_credito, placeholder: "Linea de Credito del Cliente"%>
      <% end %>
    <%= f.submit 'Guardar'%>
  <% end %>
</div>

1 个答案:

答案 0 :(得分:0)

  

param丢失或值为空:personas_x_tipos_persona

问题在于此行@personas_x_tipos_personas = Persona.new(tipos_personas_params)实际上这不是)正在调用tipos_personas_params

来自require(key)的文档,

  

传递单个键时,如果存在且其关联值为   无论是现在还是单身人士假,都会返回所述值

     

否则引发ActionController :: ParameterMissing

因此,在您的情况下,require期待:personas_x_tipos_persona,而params中缺少此项,错误也是如此。

实际上, 表单对象 :persona而不是:personas_x_tipos_persona。另外,我可以看到您正在使用fields_for,因此您需要在:personas_x_tipos_persona_attributes内将persona_params列入白名单,并且不需要tipos_personas_params方法。以下代码可以帮助您。

class PersonasController < ApplicationController
  def create_cliente
    @cliente = Persona.new(persona_params)
    #this is not needed
    #@personas_x_tipos_personas = Persona.new(tipos_personas_params) 
    if @cliente.save
      redirect_to show_clientes_path
    else
      render :new_cliente
    end
  end

  private
  def persona_params
    params.require(:persona).permit(:nombre, :apellido, :direccion, :ruc, :contacto, :email, personas_x_tipos_persona_attributes: [:id, :linea_credito])
  end
end