質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

DBから値が取り出せない(go言語,revel, gormを使用)

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 467

Akiposs

score 6

前提・実現したいこと

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 

該当のソースコード

package models

import (
    "github.com/jinzhu/gorm"
)

type App struct {
    gorm.Model
    Title    string `gorm:"column:title"`
    Contents string `gorm:"column:contents"`
    Nickname string `gorm:"column:nickname"`
} 
package models

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

func Mysql() *gorm.DB {
    DBMS := "mysql"
    USER := "superakip"
    PASS := "akihiro2sei"
    DBNAME := "go_db"
    LOGOS := "charset=utf8&parseTime=True&loc=Local"

    CONNECT := USER + ":" + PASS + "@/" + DBNAME + "?" + LOGOS
    db, err := gorm.Open(DBMS, CONNECT)
    if err != nil {
        panic("データベースへの接続に失敗しました")
    }

    // スキーマのマイグレーション
    db.AutoMigrate(&User{})
    db.AutoMigrate(&App{})
    return db
}
        <form class="col s12" action="/Create" method="POST">
          <div class="row">
            <div class="input-field col s6">
              <input id="input_text" type="text" name="Nickname" data-length="10">
              <label for="input_text">Nickname</label>
            </div>
          </div>
          <div class="row">
            <div class="input-field col s6">
              <input id="input_text" type="text" name="Title" data-length="10">
              <label for="input_text">Title</label>
            </div>
          </div>
          <div class="row">
            <div class="input-field col s12">
              <textarea id="textarea1" class="materialize-textarea"  name="Contents" data-length="400"></textarea>
              <label for="textarea1">Contents</label>
            </div>
          </div>
          <input type="submit" value="投稿する">
        </form>
package controllers

import (
    "app/app/models"
    "log"

    "github.com/revel/revel"
)

type App struct {
    *revel.Controller
}

func (c App) Index() revel.Result {
    //自動マイグレート
    models.Mysql()
    return c.Render()
}

func (c App) CreatePage() revel.Result {
    return c.Render()
}

func (c App) Create() revel.Result {
    //Formからパラメータゲット
    title := c.Params.Form.Get("Title")
    contents := c.Params.Form.Get("Contents")
    nickname := c.Params.Form.Get("Nickname")
    log.Println(title)     //タイトルカラムです(formで入力した値)
    log.Println(contents)  //コンテンツカラムです(formで入力した値)
    log.Println(nickname)  //yamato(formで入力した値)
    log.Println("これから代入していきます")
    // //modelsパッケージのUser構造体(value:なし)に代入してく
    AppIst := models.App{}
    AppIst.Title = title
    AppIst.Contents = contents
    AppIst.Nickname = nickname
    //gormでやってる
    models.Mysql().Create(&AppIst)
    log.Println("生成しました")
    a := models.Mysql().First(&AppIst)
    log.Println(a)

    log.Println("これからリダイレクトします")
    return c.Redirect(App.Index)
}

試したこと

formからデータを飛ばす過程で失敗しているのかもと思い、

models.Mysql().Create(&App{Title: "~~~", Contents="~~~~", Nickname="~~~"}


のように最初から値が入っている状態で生成もしてみたのですが、nilになってしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yoorwm

    2019/07/04 14:32

    おっと。そこでしたか。と言う事はログのここら辺で
    INFO 11:53:18 app value.go:308: &{{{0 0} 0 0 0 0} 0xc000142000 ~
    取り出した内容という事なら、AppIstの方に入っているのではないですか?

    キャンセル

  • Akiposs

    2019/07/04 14:48

    すいません知識不足もあり質問の意図がよくわからないのですが、
    DBに保存されているのではないか?という意味でしょうか 
    DBへのレコード保存はされています。

    キャンセル

  • calkinos

    2019/07/07 13:40

    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

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る