2013-01-06 240 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