2016-08-05 5 views
0

私はbeegoでかなり新しいです。私は発見し、 フレームワークを学ぶために始めるための小さなプロジェクトを開始します。私はプロジェクトを作成するために、蜂のコマンドを使用:beegoでモデルエラー

bee new my_project 

ビーゴのバージョンは次のとおりです。

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

私は少しモデルを持って、私のモデルファイルの内容は次のとおりです。

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)) 
} 

メインファイル内:

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() 
} 

コントローラファイルで:

package controllers 

import (
    "github.com/astaxie/beego" 
    "github.com/astaxie/beego/orm" 
    "github.com/hobbestigrou/mahewinsexyurl/models" 
    _ "github.com/mattn/go-sqlite3" 
    "github.com/ventu-io/go-shortid" 
    "net/url" 
) 

type MainController struct { 
    beego.Controller 
} 

type Domain struct { 
    Id int `form:"-"` 
    Url string `form:"url"` 
} 

func (c *MainController) Get() { 
    _ = beego.ReadFromRequest(&c.Controller) 

    c.Data["Form"] = &Domain{} 
    c.TplName = "index.tpl" 
} 

func (c *MainController) Post() { 
    o := orm.NewOrm() 

    flash := beego.NewFlash() 
    domain := c.Input().Get("url") 

    if _, err := url.ParseRequestURI(domain); err != nil { 
     flash.Error("Please put a valid url") 
     flash.Store(&c.Controller) 
     c.Redirect("/", 302) 
    } 

    short, _ := shortid.Generate() 
    ur := &models.ShortUrl{ 
     Domain: domain, 
     Short: short, 
    } 

    if created, _, err := o.ReadOrCreate(&ur, "Domain"); err != nil { 
     if created { 
      flash.Notice("The url was added: ", short) 
      flash.Store(&c.Controller) 
      c.Redirect("/", 302) 
      } else { 
       flash.Notice("The url already exists", short) 
       flash.Store(&c.Controller) 
       c.Redirect("/", 302) 
      } 
     } 

     c.TplName = "index.tpl" 
} 

私はフラッシュ部分をリファクタリングすることができます知っているが、それは現時点では詳細です。

ルータ:

package routers 

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

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

私はテーブルを作成するsyncdbの実行を使用:

./mahewinsexyurl orm syncdb 

テーブルが正常に作成されました。私のミスで何

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 

:私はデータをポストしようとする。しかし、私は エラーを得ましたか?

答えて

1

私はそれが中に不注意な間違いだった私のエラーを検出しましたコントローラ:

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

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

Thew新バージョンでは、次のとおりです。

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

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

エラーが仕事とSHORTURL構造体へのポインタを作成する&の二重の使用方法です。

0

あなたのコントローラーでこれが欠けていると思います。どのデータベースを使うか教えてください。私は、このリンクに行ってきました:Beego ORM

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

アップデートは

を試してみてくださいコマンドで使用するDB syncdbの実行に教える:

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

Using関数を呼び出す必要はありません。NewOrm関数で既に呼び出されているためです。https://github.com/astaxie/beego/tree/master/orm/orm.goを参照してください。エラーの原因ではありません。 – Hobbestigrou

関連する問題