Rieles – Gema Cocoon – Formas anidadas

Estoy tratando de hacer una aplicación con Rails 4.

Utilizo la gem de forma simple para las formas y trato de usar la gem de capullo para elementos nesteds de las formas.

Hice esta pregunta, que explica lo que estoy tratando de lograr con más detalle: Rieles: múltiples entradas para un solo atributo

Tengo un modelo de perfil y un modelo de calificaciones. Las asociaciones son:

perfil.rb

has_many :qualifications accepts_nested_attributes_for :qualifications, reject_if: :all_blank, allow_destroy: true 

cualificación.rb

 belongs_to :profile 

El controlador de perfiles incluye los atributos de calificación en los parámetros fuertes:

 def profile_params params[:profile].permit(:user_id, :title, :hero, :overview, :research_interest, :occupation, :external_profile, :working_languages, :tag_list, qualifications_attributes: [:id, :level, :title, :year_earned, :institution, :_destroy] ) end 

Mi formulario de perfil ahora tiene:

  
Your qualifications

Mi formulario parcial de calificaciones ahora se nombra en mi carpeta de vistas de calificación como _qualifications_fields.html.erb

 
"Your award" %>
"When did you graduate?", collection: (Date.today.year - 50)..(Date.today.year) %>

Comenté el enlace de eliminación, porque como está, me sale este error:

 undefined method `new_record?' for nil:NilClass 

Estoy desconcertado por la forma en que Rails informa de los errores: rara vez entiendo los mensajes de error de este estilo, pero supongo que es algo que ver con que no haya ninguna calificación que eliminar. ¿Capullo maneja esto?

Cuando comento esto y vuelvo a intentarlo, aparece este error con el enlace para agregar una asociación:

 undefined method `object' for # 

Tampoco sé qué significa este mensaje.

Entonces, siguiendo los pasos en los documentos de la gem Cocoon, (con cambios porque no sé cómo escribir cosas en haml; y cambiando la forma de expresión para hacer referencia al creador de formas ‘f: f’ funciona en el rest de mi formas, así que supongo que la expresión que se muestra en los documentos podría ser algo que ver con haml), tengo 2 errores en esta etapa:

  1. añadir asociación – objeto de método indefinido
  2. eliminar asociación – método no definido `new_record?

Estoy luchando para entender lo que está pasando aquí.

TOMANDO LA SUGERENCIA DE JEIWAN:

Cambio mi formulario de perfil a:

    
Your professional qualifications
'formsubmit' %>

Cambio mi formulario de campos de calificación a:

 
"Your award" %>
"When did you graduate?", collection: (Date.today.year - 50)..(Date.today.year) %>

Cuando guardo esto y lo bash de nuevo, me sale este error:

 undefined method `new_record?' for nil:NilClass 

El mensaje de error resalta esta línea:

   

 link_to_add_association 'Add a qualification', f: f, partial: 'qualifications/qualification_fields' 

f: f es incorrecto aquí. El segundo parámetro debe ser un generador de formularios (solo un objeto, no un hash) y el tercer parámetro: el nombre de la asociación, es decir, las :qualifications en su caso. Entonces debería verse así:

 link_to_add_association 'Add a qualification', f, :qualifications, partial: 'qualifications/qualification_fields' 

Y aquí:

 link_to_remove_association 'Remove this qualification', f, :f 

:f también está mal. El tercer parámetro aquí es opciones de HTML. Si no los necesita, solo especifique 2 parámetros:

 link_to_remove_association 'Remove this qualification', f 

A continuación, _qualification_fields.html.erb no debe contener simple_fields_for . Este parcial se utiliza para representar los campos de un objeto de asociación distinto. Se muestra cuando hace clic en ‘Agregar una calificación’ o cuando su objeto principal ya tiene algunas calificaciones. simple_fields_for :qualifications deben incluirse en su formulario de perfil y contener render 'qualifications/qualifications_fields', f: f y link_to_add_association ... Considere este ejemplo: https://github.com/nathanvda/cocoon#simpleform

Intereting Posts