2016-08-22 7 views
1

私は2つのモデルを持っています。会社と予約。
モデル会社関係外来キーを設定する方法

"bookings": { 
    "type": "hasMany", 
    "model": "Booking", 
    "foreignKey": "companyId" 
} 

の関係部分での問題は、OKでない企業IDなしで予約を投稿することが可能となります。
エクスプローラから。

Booking { 
    bookingId (string, optional), 
    name (string), 
    location (string), 
    companyId (string, optional) 
} 

答えて

3

実際にこの特定の検証をすぐに実行することはできません。

a)はあなたがBookingモデルからレコードを作成する能力を持っている任意の他の方法と一緒にBooking.disableRemoteMethod('create', ...)を無効にすることで、エンドポイントを通じて会社を通じてPOST /api/Company/{id}/Bookingsの予約の作成を強制することができます。代わりに、夫婦の異なるオプションがあります。

b)リモートフックを追加して、会社レコードが存在するかどうかをチェックし、それに応じてエラーをスローすることができます。

Booking.beforeRemote('create', function(ctx, booking, next) { 
    var Company = Booking.app.models.Company; 
    var companyId = ctx.req.body.companyId; 

    if (companyId) { 
    errorMsg = 'Company with id=' + companyId + ' does not exist.'; 
    var noCompany = new Error(errorMsg); 
    Company.findById(companyId, function(err, company) { 
     if (err) next(err); 
     if (!company) { 
     ctx.res.statusCode = 400; 
     next(noCompany); 
     } else { 
     next(); 
     } 
    }); 
    } else { 
    next(); 
    } 
}); 

また、レコードがPUT /api/Bookingsなどの作成ができ、他のエンドポイントで同じことを行う必要があります。

希望に役立ちます!

0

companyIdプロパティをbooking.jsonファイルに明示的に追加し、required:trueプロパティを追加できます。それはのように見える

{ 
    "properties": { 
     "companyId": { 
      "type": "number", 
      "required": true 
     }, 
     ... //other properties 
    } 
} 
+0

私はこれが検証問題を解決するとは思わない。あなたが提供した「id」を持つ会社が存在しないとどうなりますか? – richardpringle

関連する問題