0

我有一个模型的这个静态方法,它正在创建多个记录。该方法在保存父对象时调用,用于创建适当的 n 个子记录的数据被传递给该方法(new_record),然后迭代传递给它的数组,并创建子记录。

Job 有许多 Job 活动。此方法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 的分配......

而且,正如建议的那样,我实施了保存!但这并没有引发任何例外..它仍然默默地表现着它在做什么...... :(

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)

我在某处遗漏了什么吗?

4

2 回答 2

0

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

可能是模型未通过验证或设置不正确。使用save!will 立即并且明显失败,告诉你什么是真正的错误。

于 2013-01-06T20:44:50.490 回答
0

找到问题了,解决办法...

我使用 attr_accessor 作为模型,而我应该一直使用 attr_accessible ...

詹姆斯对这个问题的回答帮助了我..

在 ruby​​ 对象上调用 .save 只会为所有字符串传递 nil

于 2013-01-08T02:35:08.857 回答