2016-08-05 37 views
0

Ich bin ziemlich neu auf Beego. Ich beginne ein kleines Projekt zu entdecken und beginne zu lernen das Framework. Ich die Bienen Befehl verwendet, um das Projekt zu erstellen:Modellfehler mit Beego

bee new my_project 

Die Version von beego ist:

bee :1.4.1 
beego :1.6.1 
Go :go version go1.6.3 linux/amd64 

ich ein kleines Modell, der Inhalt meiner Modelldatei ist:

package models 

import "github.com/astaxie/beego/orm" 

type ShortUrl struct { 
    Id  int `orm:"auto"` 
    Domain string 
    Short string 
} 

func init() { 
    orm.RegisterModel(new(ShortUrl)) 
} 

In der Hauptdatei:

package main 

import (
    "github.com/astaxie/beego" 
    "github.com/astaxie/beego/orm" 
    _ "github.com/hobbestigrou/mahewinsexyurl/routers" 
) 

func init() { 
    orm.RegisterDriver("sqlite3", orm.DRSqlite) 
    orm.RegisterDataBase("default", "sqlite3", "data.db") 
    orm.RunCommand() 
} 

func main() { 
    beego.Run() 
} 

In der Controller-Datei:

Ich weiß, ich kann den Flash-Teil refaktorieren, aber es ist ein Detail im Moment.

Der Router:

package routers 

import (
    "github.com/hobbestigrou/mahewinsexyurl/controllers" 
    "github.com/astaxie/beego" 
) 

func init() { 
    beego.Router("/", &controllers.MainController{}) 
} 

verwendete ich die syncdb die Tabelle zu erstellen:

./mahewinsexyurl orm syncdb 

Die Tabelle erfolgreich erstellt wurde. Aber wenn ich versuche, Daten zu schreiben, ich habe einen Fehler :

2016/08/05 17:16:24 [router.go:854][C] the request url is/
2016/08/05 17:16:24 [router.go:855][C] Handler crashed with error <Ormer> table: `.` not found, maybe not RegisterModel 
2016/08/05 17:16:24 [router.go:861][C] /usr/lib/go-1.6/src/runtime/asm_amd64.s:472 
2016/08/05 17:16:24 [router.go:861][C] /usr/lib/go-1.6/src/runtime/panic.go:443 
2016/08/05 17:16:24 [router.go:861][C] /home/hobbestigrou/go/src/github.com/astaxie/beego/orm/orm.go:110 
2016/08/05 17:16:24 [router.go:861][C] /home/hobbestigrou/go/src/github.com/astaxie/beego/orm/orm.go:135 
2016/08/05 17:16:24 [router.go:861][C] /home/hobbestigrou/go/src/github.com/hobbestigrou/mahewinsexyurl/controllers/default.go:47 
2016/08/05 17:16:24 [router.go:861][C] /home/hobbestigrou/go/src/github.com/astaxie/beego/router.go:763 
2016/08/05 17:16:24 [router.go:861][C] /usr/lib/go-1.6/src/net/http/server.go:2081 
2016/08/05 17:16:24 [router.go:861][C] /usr/lib/go-1.6/src/net/http/server.go:1472 
2016/08/05 17:16:24 [router.go:861][C] /usr/lib/go-1.6/src/runtime/asm_amd64.s:1998 

Was ist mein Fehler?

Antwort

1

ich meinen Fehler gefunden, es war ein Flüchtigkeitsfehler in die Steuerungen:

ur := &models.ShortUrl{ 
    Domain: domain, 
    Short: short, 
} 

if created, _, err := o.ReadOrCreate(&ur, "Domain"); err == nil { 
} 

Thew neue Version ist:

ur := models.ShortUrl{ 
    Domain: domain, 
    Short: short, 
} 

if created, _, err := o.ReadOrCreate(&ur, "Domain"); err == nil { 
} 

Der Fehler die Doppelnutzung von & ist Zeiger auf eine SHORTURL Struktur zu arbeiten und zu schaffen.

0

Ich denke, dass Sie dies in Ihrem Controller vermissen. Angabe der zu verwendenden Datenbank Ich ging zu diesem Link: Beego ORM

o := orm.NewOrm() 
o.Using("default") 
dr = o.Driver() 
fmt.Println(dr.Name() == "default") // true 
fmt.Println(dr.Type() == orm.DRSqlite) // true 

Update-Versuchen

die syncdb sagen, welche db in dem Befehl verwendet werden:

./mahewinsexyurl orm syncdb -db="default" 
+0

Es ist nicht notwendig, die Using-Funktion aufzurufen, da sie bereits von der NewOrm-Funktion aufgerufen wird, siehe https://github.com/astaxie/beego/tree/master/orm/orm.go, daher ist es nicht der Grund für den Fehler . – Hobbestigrou