前提・実現したいこと
Go言語でrevelフレームワーク、Gormを使い、ミニ掲示板のようなものを作っています。
Html内のformで入力したものがDBに保存されるところまで行ったのですが、DBから取り出すことが出来ない状況です。
極端な話Gormのドキュメントをそのままコピーしてテストするもうまくいきません。
何か勘違いしているところがあるのだと思います。宜しければご指導のほどお願い致します。
データ保存の際出る表示
INFO 11:53:18 app value.go:308: タイトルカラムです section=system INFO 11:53:18 app value.go:308: コンテンツカラムです section=system INFO 11:53:18 app value.go:308: yamato section=system INFO 11:53:18 app value.go:308: これから代入していきます section=system INFO 11:53:18 app value.go:308: 生成しました section=system INFO 11:53:18 app value.go:308: &{{{0 0} 0 0 0 0} 0xc000142000 <nil> 1 0xc000542000 false 0 {0xc0002864b0} 0xc0004e11e0 {{0 0} {{map[gorm:order_by_primary_key:0xc0000b25a8] false}} map[] 0} 0xc0003a1790 <nil> 0xc000295320 false <nil>} section=system INFO 11:53:18 app value.go:308: これからリダイレクトします section=system
該当のソースコード
Struct
1package models 2 3import ( 4 "github.com/jinzhu/gorm" 5) 6 7type App struct { 8 gorm.Model 9 Title string `gorm:"column:title"` 10 Contents string `gorm:"column:contents"` 11 Nickname string `gorm:"column:nickname"` 12}
DB
1package models 2 3import ( 4 "github.com/jinzhu/gorm" 5 _ "github.com/jinzhu/gorm/dialects/mysql" 6) 7 8func Mysql() *gorm.DB { 9 DBMS := "mysql" 10 USER := "superakip" 11 PASS := "akihiro2sei" 12 DBNAME := "go_db" 13 LOGOS := "charset=utf8&parseTime=True&loc=Local" 14 15 CONNECT := USER + ":" + PASS + "@/" + DBNAME + "?" + LOGOS 16 db, err := gorm.Open(DBMS, CONNECT) 17 if err != nil { 18 panic("データベースへの接続に失敗しました") 19 } 20 21 // スキーマのマイグレーション 22 db.AutoMigrate(&User{}) 23 db.AutoMigrate(&App{}) 24 return db 25}
FormHtml
1 <form class="col s12" action="/Create" method="POST"> 2 <div class="row"> 3 <div class="input-field col s6"> 4 <input id="input_text" type="text" name="Nickname" data-length="10"> 5 <label for="input_text">Nickname</label> 6 </div> 7 </div> 8 <div class="row"> 9 <div class="input-field col s6"> 10 <input id="input_text" type="text" name="Title" data-length="10"> 11 <label for="input_text">Title</label> 12 </div> 13 </div> 14 <div class="row"> 15 <div class="input-field col s12"> 16 <textarea id="textarea1" class="materialize-textarea" name="Contents" data-length="400"></textarea> 17 <label for="textarea1">Contents</label> 18 </div> 19 </div> 20 <input type="submit" value="投稿する"> 21 </form>
Create
1package controllers 2 3import ( 4 "app/app/models" 5 "log" 6 7 "github.com/revel/revel" 8) 9 10type App struct { 11 *revel.Controller 12} 13 14func (c App) Index() revel.Result { 15 //自動マイグレート 16 models.Mysql() 17 return c.Render() 18} 19 20func (c App) CreatePage() revel.Result { 21 return c.Render() 22} 23 24func (c App) Create() revel.Result { 25 //Formからパラメータゲット 26 title := c.Params.Form.Get("Title") 27 contents := c.Params.Form.Get("Contents") 28 nickname := c.Params.Form.Get("Nickname") 29 log.Println(title) //タイトルカラムです(formで入力した値) 30 log.Println(contents) //コンテンツカラムです(formで入力した値) 31 log.Println(nickname) //yamato(formで入力した値) 32 log.Println("これから代入していきます") 33 // //modelsパッケージのUser構造体(value:なし)に代入してく 34 AppIst := models.App{} 35 AppIst.Title = title 36 AppIst.Contents = contents 37 AppIst.Nickname = nickname 38 //gormでやってる 39 models.Mysql().Create(&AppIst) 40 log.Println("生成しました") 41 a := models.Mysql().First(&AppIst) 42 log.Println(a) 43 44 log.Println("これからリダイレクトします") 45 return c.Redirect(App.Index) 46}
試したこと
formからデータを飛ばす過程で失敗しているのかもと思い、
models.Mysql().Create(&App{Title: "~~~", Contents="~~~~", Nickname="~~~"}
のように最初から値が入っている状態で生成もしてみたのですが、nilになってしまいました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
取り出す所を書いてください
失礼致しました。
Createというコードの
a := models.Mysql().First(&AppIst)
log.Println(a)
の部分がそれを指しているつもりなのですが、そもそもそれがDBから取り出すという意味になっていませんか?汗
おっと。そこでしたか。と言う事はログのここら辺で
INFO 11:53:18 app value.go:308: &{{{0 0} 0 0 0 0} 0xc000142000 ~
取り出した内容という事なら、AppIstの方に入っているのではないですか?
すいません知識不足もあり質問の意図がよくわからないのですが、
DBに保存されているのではないか?という意味でしょうか
DBへのレコード保存はされています。
a := DB.First(&AppIst)
この行で、データはAppIstに入ります、 a に入るのはgorm.DBです。
b := models.App{}
models.Mysql().First(&b)
log.Println(b)
でなかみをみてみましょう
https://godoc.org/github.com/jinzhu/gorm#DB.First
func (s *DB) First(out interface{}, where ...interface{}) *DB
あなたの回答
tips
プレビュー