0

複数のレコードを作成しているモデル用のこの静的メソッドがあります。このメソッドは親を保存するときに呼び出され、適切な n 個の子レコードを作成するためのデータがこのメソッド (new_record) に渡され、渡された配列を反復処理して子レコードを作成します。

ジョブには多くのジョブ アクティビティがあります。このメソッド new_record は job_activities モデルに属し、ジョブ レコードを保存するときに job_controller で呼び出されます。基本的に、2 つのモデルを 1 つの形式で実装しようとしています。ジョブは「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#savetrue または false を返しますが、 (メソッド名の末尾にある にmodel#save!注意してください) false を返す代わりに例外を発生させます。!

モデルが検証に失敗しているか、正しく設定されていない可能性があります。を使用save!すると、すぐに明らかに失敗し、実際に何が問題なのかがわかります。

于 2013-01-06T20:44:50.490 に答える
0

問題を発見し、解決策を...

モデルにattr_accessorを使用していましたが、attr_accessibleを使用する必要がありました...

この質問に対するジェームズからの回答は私を助けました..

ruby オブジェクトで .save を呼び出すと、すべての文字列に対して nil しか渡されない

于 2013-01-08T02:35:08.857 に答える