2013-01-06 578 views
0

我有一个模型的静态方法,它创建多个记录。当保存父对象时调用此方法,用于创建合适的n个子记录的数据被传递(new_record),然后遍历传递给它的数组,并创建子记录保存一条记录..但不保存... :(

作业有很多作业活动,这个方法new_record属于job_activities模型,并且在保存作业记录时在job_controller中调用。基本上,试图在一个单一的形式来实现两种模式工作“的has_many” job_activities和Job_activites“belongs_to的”工作

这是我迄今放在一起 - 。

 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 

奇怪的事情发生的是,在之前和之后的对象JA的分配状态,体现“CREATED_BY”的分配,但不job_id_sk和job_activity的...

而且,作为建议,我实施保存!但didnt产生任何异常..其还是相当默默表现其做什么... :(

AAAAAAAAAAAAAAAAAAAAAAA creating a new record for "ACT1" and 40 
Job ID SK = 40 
act = ACT1 
Record before assignment #<JobActivity id: nil, job_id_sk: nil, job_activity: nil, created_by: nil, updated_by: nil, created_at: nil, updated_at: nil> 

Record after assignment #<JobActivity id: nil, job_id_sk: nil, job_activity: nil, created_by: "raghav", updated_by: "raghav", created_at: nil, updated_at: nil> 

record after saving #<JobActivity id: 13, job_id_sk: nil, job_activity: nil, created_by: "raghav", updated_by: "raghav", created_at: "2013-01-08 02:22:30", updated_at: "2013-01-08 02:22:30"> 

然而,当我去检查该数据应该已经保存在MySQL表,我看到的只有NULL值已通过了...

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) 

我缺少的东西的地方?

+1

尝试'ja.save!',你会发现这里是你的问题。 –

+0

您可能希望将“job_id_sk”和“job_activity”列设置为NULL以提供额外的保护层。我甚至会说你应该让所有的东西都不是NULL(即使默认是允许NULL),除非你有一个很好的理由不这样做。 –

回答

0

model#save返回true或false,但model#save!(注意!在方法名的末尾)将引发异常而不是returni假的。

机会可能是该模型未通过验证或以其他方式设置不正确。使用save!将立即显然失败,告诉你什么是错误的。

+0

这样做,它的经历很好。没有例外提出。 – Gyan