2013-12-13 62 views
2

我是鈦合金和合金的新手,但使用大約3個月後我感覺很舒服。然而,我對合金中的模型非常陌生,我遇到了一個我無法弄清楚的錯誤。以下是我的模型和控制器設置的方式(不包括與.XML文件無關的視圖)鈦合金模型 - 表沒有列

Orders.js |型號

exports.definition = { 
config : { 
    columns : { 
     "id_Orders" : "INTEGER PRIMARY KEY AUTOINCREMENT", 
     "reseller_name" : "TEXT", 
     "reseller_invoice_account" : "TEXT" 
    }, 
    adapter : { 
     type : "sql", 
     collection_name : "orders", 
     idAttribute: "id_Orders" 
    } 
} 

Orders.js |控制器

var network = require("network"); 
network.soapRequest("<prem:getResellersRequest/>", function(a) { 
    Ti.API.info("The Soap Server Returned: " + JSON.stringify(a)); 
    Ti.API.info("There are " + a.reseller_name.length + " returned records."); 
    for (var i = 0; a.reseller_name.length > i; i++) { 
     var listModel = Alloy.createModel("orders", { 
      reseller_name: a.reseller_name[i], 
      reseller_invoice_account: a.reseller_invoice_account[i] 
     }); 
     listModel.save(); 
     Alloy.Collections.orders.fetch(); 
    } 
}); 
Alloy.Collections.orders.fetch(); 

在listModel.save會出現錯誤()行:

錯誤執行SQL:表訂單沒有名爲RESELLER_NAME柱:,在編譯:REPLACE INTO訂單(id_Orders,RESELLER_NAME, reseller_invoice_account)VALUES(?,?,?);

網絡是一個向web服務器發送SOAP請求並使用soap2json.js將其轉換爲JSON的庫。我確信網絡部分沒有任何問題。 我很確定返回的JSON對象'a'存在錯誤。我可以單獨輸出所有的值並在其他地方使用 - 當我試圖將模型保存到集合時發生錯誤。

我錯過了什麼嗎?

回答

4

通常會在第一次運行應用程序後修改模型定義時發生,可能是您並在此之後添加了reseller_name列。您必須重新生成表格。

當它發生在我身上,我處於開發階段時,我通常會在alloy.js文件的開頭做一個DROP表。試試這個:

var db = Ti.Database.open ('_alloy_'); 
    db.Execute ('DROP TABLE IF EXISTS orders;'); 
    db.close(); 

顯然,這會破壞表中的任何數據,但合金再生與新定義的表,你instancies集合或模型中的第一次。

,如果你需要將自己的數據來處理這些變化的正確方式是使用migrations

+2

這樣看來,的確如此 - 在設備上已經存在的數據庫丟失我後來加列。我克服這個問題的最簡單方法是進入應用程序的設備信息並清除應用程序的數據。我認爲這與刪除表格的效果相同,但要容易得多。 –