Go Revel Validation Unique 独自関数を作る サクッとできちゃった♥(๑´ڡ`๑)てへぺろ 編

あーあれです。

綴りがまちがってました(;^^)ヘ..
でも、ワシが間違ってたんじゃないです。

あ(; ・`д・´)いやでも、チェックしなかったワシが・・・
まず、その証拠から
http://stackoverflow.com/questions/24112433/form-input-validation-in-revel

type Validator interface {
    IsSatisfied(interface{}) bool
    DefaultMessage() string
}


type usernameChecker struct {}

func(u usernameChecker) IsSatisified(i interface{}) bool {
    s, k := i.(string)

    if !k {
        return false
    }

IsSatisified

わかりますかね。
ちょっとわかりにくいですよね。

どどどどど、こらぁ(ノ`Д´)ノ彡┻━┻


ちなみに、DB絡みのチェックだと・・・

import (
  _ "fmt"
  "github.com/coopernurse/gorp"
  _ "github.com/revel/revel"
  "yourapp/app/models"
)

type usernameChecker struct {
  Dbm *gorp.Transaction
}


func(u usernameChecker) IsSatisfied(i interface{}) bool {
    s, ok := i.(string)

    if !ok {
        return false
    }

    /* check if s exists in DB */
    membername := i.(string)
    members := Dbm.Select(models.Member{}, `select * from member where membername = $1`, membername)


    if len(members) != 0 {
        return false
    }
    
    return true
}

func(u usernameChecker) DefaultMessage() string {
    return "既に登録されています!!"
}
func (c MyApp) SaveUser(username string) revel.Result {
    c.Validation.Check(username, usernameChecker{c.Txn}).Message("more specific or translated message in case of failure")
}

とかやってやると、ホクホクになれます。

人は、力抜いた瞬間に答えが浮かぶ・・・・こともあったとさ。