2016-06-05 2 views
3

Я начинаю в рельсах и у меня есть эта ошибка, что я не в состоянии решить ..Ошибка «пары отсутствуют или значение пусто: personas_x_tipos_persona»

Ошибка - пары отсутствуют или значение пусто: 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

пары отсутствуют или значение пусто: 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 
+0

Когда я добавляю в ** ** персон (Номбры, Apellido и т.д.) Я хотел бы также добавить в ** personas_x_tipos_personas ** (id_persona, id_tipos_persona, linea_credito, Saldo) Я думаю, что я должен сделать что-то как это, но я вытащил эту ошибку определение функции create_cliente @cliente = Persona.new (persona_params) @personas_x_tipos_personas = PersonasXTiposPersona.new (Persona.last.id, TiposPersona.find_by (: Descripcion => 'Cliente') , tipos_personas_params, saldo: 0) if @ cliente.save redirect_to show_clientes_path еще render : new_cliente end end' –

+0

спасибо @Pavan, я решил это! : D –

Смежные вопросы