我从铁道开始,我有这个错误,我无法解决..
错误 - 缺少参数或值为空: 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>
答案 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