2017-12-02 179 views
1

使用autoform,似乎數據是從autoform傳遞的,因爲我的服務器上的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; } 
}); 

下面是我從控制檯日誌中得到我的來自我的流星法。所以我確實得到了更改(在這種情況下,將tenantID和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 }}); 
},