Guardando un registro … pero no guardando … :(

Tengo este método estático para un modelo, que está creando varios registros. Se llama a este método al guardar el padre, los datos para crear n registros secundarios apropiados se pasan a este método (new_record) que luego itera a través de la matriz que se le pasa y crea los registros secundarios.

El trabajo tiene muchas actividades laborales. Este método new_record pertenece al modelo job_activities y se invoca en job_controller, al guardar el registro del trabajo. Básicamente tratando de implementar dos modelos en una sola forma. Job “has_many” job_activities y Job_activites “pertenece a” un trabajo.

Esto es lo que he reunido hasta ahora:

def self.new_record(sk_job_id, activities_list) activities_list.each do | act | puts "AAAAAAAAAAAAAAAAAAAAAAA creating a new record for "+act.inspect+" and " + sk_job_id.to_s ja = JobActivity.new puts "Job ID SK = "+sk_job_id.to_s puts "act = "+act puts "Record before assignment "+ ja.inspect ja.job_id_sk = sk_job_id ja.job_activity = act ja.created_by = "raghav" ja.updated_by = "raghav" puts "Record after assignment "+ ja.inspect ja.save! puts "record after saving "+ ja.inspect end end 

Lo extraño que sucede es que el estado de asignación anterior y posterior del objeto ja refleja la asignación de “created_by” pero no de job_id_sk y job_activity …

Y, como sugerí, implementé el guardar! pero eso no generó ninguna excepción … sigue comportándose de forma bastante silenciosa lo que está haciendo … 🙁

 AAAAAAAAAAAAAAAAAAAAAAA creating a new record for "ACT1" and 40 Job ID SK = 40 act = ACT1 Record before assignment # Record after assignment # record after saving # 

Sin embargo, cuando voy y reviso la tabla mysql donde deberían haberse guardado los datos, veo que solo se han pasado valores NULL en …

 mysql> select job_id_sk, job_activity from job_activities; +-----------+--------------+ | job_id_sk | job_activity | +-----------+--------------+ | NULL | NULL | | NULL | NULL | | NULL | NULL | | NULL | NULL | | NULL | NULL | +-----------+--------------+ 5 rows in set (0.00 sec) 

¿Me estoy perdiendo algo en algún lugar?

model#save devuelve true o false, pero model#save! (tenga en cuenta que ! al final del nombre del método) generará una excepción en lugar de devolver falso.

Lo más probable es que el modelo esté fallando una validación o se haya configurado incorrectamente. Utilizando save! inmediatamente y obviamente fallará, diciéndole lo que realmente está mal.

Encontré el problema, y ​​la solución …

Estaba usando attr_accessor para el modelo, mientras que debería haber usado attr_accessible …

La respuesta de James a esta pregunta me ayudó.

Llamado .save en un objeto ruby ​​solo pasa nil para todas las cadenas