2016-05-31 7 views
0

私は2つのモデルを持っています:ファイルとコース。ファイルはコースに属し、CourseIdフィールドを持っています。トランザクション中に特定の検証ルールを無効にする方法はありますか?

ある時点で、トランザクションを使用して両方を検証してから挿入する必要がありましたが、Fileモデルの検証ルールの1つが、通知されたCourseIdが存在するかどうかを検証しますトランザクション中)、このルールはトランザクション中にフラグが立てられます。なぜなら、私たちはすべて期待できる通り、CouseIdは存在しないからです。

models.sequelize.transaction(function (t) { 
    // if we want to insert a new course 
    if (formData.courseId == 0) { 
     return models.course.create({ 
      name: formData.courseName, 
      fieldOfStudy: formData.fieldOfStudyId 
     }, {transaction: t}).then(function(course) { 
      return models.file.create({ 
       name: formData.name, 
       universityId: formData.universityId, 
       status: 1, 
       type: formData.typeId, 
       createdBy: userId, 
       file_raw: files, 
       courseId: course.id // here is the problem! 
      }, {transaction: t}); 
     }); 
    // if we want to use a existing one     
    } else { 
     return models.file.create({ 
      name: formData.name, 
      universityId: formData.universityId, 
      courseId: formData.courseId, 
      status: 1, 
      type: formData.typeId, 
      createdBy: userId, 
      file_raw: files 
     }, {transaction: t}); 
    } 
}) 

私はdinamically CourseIdフィールドの検証ルールを無効にすることができればこれは修正される可能性があり、どうやらこれはまだ不可能です。別のアプローチは仮想フィールドですが、これはあまり「エレガント」ではありません。

アイデア?

答えて

1

明らかに、これは「.create()メソッド」については記載されていませんが、簡単な解決策があります:skipです。

hereがわかるように、.validateメソッドには「スキップ」オプションがあります。問題を解決するには、[「courseId」]にスキップするだけです:

return models.file.create({ 
    name: formData.name, 
    universityId: formData.universityId, 
    status: 1, 
    type: formData.typeId, 
    createdBy: userId, 
    file_raw: files, 
    courseId: course.id 
}, {skip: ['courseId'], transaction: t}); 
関連する問題