外部レコード(例:コメント)をこのレコードのコレクション(例:「comments」)に追加します。
PUT /:model/:id/:association/:fk
このアクションは、他のレコードへの参照(「外部」または「子」レコード)を、このレコードの特定のコレクション(「主」または「親」レコード)に追加します。
:id
がデータベースに存在する主レコードに対応しない場合、res.notFound()
を使用して応答します。:fk
がデータベースに存在する外部レコードに対応しない場合、res.notFound()
を使用して応答します。via
を持つことを意味する)の場合、そのvia
で指している外部キーまたはコレクションも外部レコードで更新されます。パラメータ | 型 | 詳細 |
---|---|---|
model | 親レコードを含むモデルのidentity。 例: 'employee' (/employee/7/involvedinPurchases/47 内) |
|
id | 目的の親レコードの主キー値。 例: '7' (/employee/7/involvedInPurchases/47 内) |
|
association | コレクション属性の名前。 例: 'involvedInPurchases' |
|
fk | このコレクションに追加する子レコードの主キー値(通常はid)。 例: '47' |
ドリー(社員番号7)が関わっている購入リストに購入番号47を追加する
PUT /employee/7/involvedInPurchases/47
親レコードである「ドリー」を返します。彼女は現在、購入番号47に関わっています。
{
"id": 7,
"name": "Dolly",
"createdAt": 1485462079725,
"updatedAt": 1485476060873,
"involvedInPurchases": [
{
"amount": 10000,
"createdAt": 1485476060873,
"updatedAt": 1485476060873,
"id": 47,
"cashier": 7
}
]
}
$.put('/employee/7/involvedInPurchases/47', function (purchases) {
console.log(purchases);
});
$http.put('/employee/7/involvedInPurchases/47')
.then(function (purchases) {
console.log(purchases);
});
io.socket.put('/employee/7/involvedInPurchases/47', function (purchases) {
console.log(purchases);
});
curl https://#:1337/employee/7/involvedInPurchases/47 -X "PUT"
アプリケーションでWebSocketsを有効にしている場合、主レコードに購読しているすべてのクライアントは、通知イベント名が主モデルのidentity(例:'employee'
)であり、メッセージが以下のフォーマットを持つ通知を受け取ります。
id: <the parent record primary key value>,
verb: 'addedTo',
attribute: <the parent record collection attribute name>,
addedIds: <the now-added child records' primary key values>
例えば、上記の例を続けると、ドリー、つまり社員番号7に購読しているすべてのクライアント(リクエストを行っているクライアントを除く)は、以下のメッセージを受け取ります。
{
id: 7,
verb: 'addedTo',
attribute: 'involvedInPurchases',
addedIds: [ 47 ]
}
子レコードに購読しているクライアントは、追加の通知を受け取ります。
involvedInPurchases
にvia
がある場合、updated
またはaddedTo
通知が、追加した子レコードである購入番号47に購読しているクライアントにも送信されます。
反対側の
via
リンクされた属性が複数形の場合(例:cashiers
)、別のaddedTo
通知が送信されます。そうでない場合、via
が単数形属性を指している場合(例:cashier
)、updated
通知が送信されます。
最後に、3番目の通知が送信される場合があります。
この購入をドリーの集合に追加することで、他の従業員のinvolvedInPurchases
から「盗む」場合、その他の、盗まれた従業員レコード(例:モトキ、従業員番号12)に購読しているクライアントは、removedFrom
通知を受け取ります(ブループリント > remove fromを参照)。
- ドリーについてもう少し詳しく知りたい場合は、上記の例に関するより詳細なチュートリアルをこちらでご覧いただけます。
- このアクションは、複数形(「コレクション」)属性を扱うためのものです。単数形(「モデル」)属性を設定または解除する場合は、updateを使用して外部キーを新しい外部レコードのid(または関連付けをクリアする場合は
null
)に設定してください。コレクション内のレコードのセットを別のセットで完全に置き換える場合は、replaceブループリントを使用してください。上記の例では、「rest」ブループリントが有効になっており、プロジェクトには属性
involvedInPurchases: {collection: 'Purchase', via: 'cashier'}
を持つ 'Employee' モデルと、属性cashier: {model: 'Employee'}
を持つPurchase
モデルが少なくとも1つ含まれていると仮定しています。これは、以下を実行することで簡単に実現できます。$ sails new foo $ cd foo $ sails generate model purchase $ sails generate model employee
その後、
api/models/Purchase.js
とapi/models/Employee.js
を編集します。