2017-12-02 5 views
1

autoformを使用すると、サーバ上のMeteorメソッドがデータを取得してもデータが自動フォームから渡されているように見えますが、私のデータベース...何が欠けていますか?MeteorメソッドはAutoformを使用してデータベースを更新しません

オートコード...

{{> quickForm collection="Rooms" type="method-update" 
     doc=this autosave=true id=makeUniqueID 
meteormethod="updateRoom"}} 

流星方法:

updateRoom: function (room) { 
    console.log(room); 
    Rooms.update({_id: room._id}, { $set: { 
    checkIn: room.checkIn, 
    checkOut: room.checkOut, 
    tenantID: room.tenantID, 
    available: room.available, 
    needCleaning: room.needCleaning, 
}}); 
}, 

は/ルールを拒否できるようにマイ:

以下
Rooms.allow({ 
insert() { return false; }, 
update() { return false; }, 
remove() { return false; } 
}); 

Rooms.deny({ 
insert() { return true; }, 
update() { return true; }, 
remove() { return true; } 
}); 

は、私は私の中にコンソールログから得るものです私の流星法からだから私は変更(この場合はテナントIDとfalseを利用可能に変更する)を行いますが、データベースでは更新されません。私はどこかで詳細を少し紛失していますが、この時点でそれを見ることはできません。

enter image description here

答えて

2

メソッドに渡しているroom変数はmodifier$set:キーの下にすべてをネストされます。

updateRoom: function (room) { 
    Rooms.update({_id: room._id}, room.modifier); 
}, 

をしかし、あなたはメソッドに全体修飾子を渡しているので、それは本当に安全ではないですし、ハッカーは、彼らが望んだもので渡すことができます。

は、あなたは、単に行うことができます。

ベター:

updateRoom(room) { 
    check(room,Object); 
    check(room._id,String); 
    {checkIn, checkOut, tenantId, available, needCleaning } = room.modifier.$set; 
    Rooms.update(room._id, { $set: {checkIn, checkOut, tenantId, available, needCleaning }}); 
}, 
関連する問題