Я использую golang с sqlx и пытаюсь показать на странице следующий вывод:
app_monitor.name | app_domains.name
По сути, он получает все monitor.name на основе идентификатора пользователя и получает имя_домена из другой таблицы. Я не могу получить доменное имя из другой таблицы. Поиск имени монитора выполнен успешно. Должен ли я получить имя_домена в модели, контроллере или шаблонизаторе?
Вот несколько полей в моей базе данных:
app_monitor: id, name, domain_id
user: id, domain_id
app_domains: id, name
Фрагмент моей модели:
type Monitor struct {
ID uint32 `db:"id"` // Don't use Id, use MonitorID() instead for consistency with MongoDB
Name string `db:"name"`
DID uint32 `db:"domain_id"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
Status uint8 `db:"status"`
}
func MonitorByUserID(userID string) ([]Monitor, error) {
var err error
var result []Monitor
switch database.ReadConfig().Type {
case database.TypeMySQL:
err = database.SQL.Select(&result, "SELECT app_monitor.id, app_monitor.name, app_monitor.status FROM app_monitor LEFT JOIN user ON app_monitor.domain_id = user.domain_id WHERE user.id = ?", userID)
default:
err = ErrCode
}
return result, standardizeError(err)
}
Мой контроллер
func MonitorReadGET(w http.ResponseWriter, r *http.Request) {
// Get session
sess := session.Instance(r)
userID := fmt.Sprintf("%s", sess.Values["id"])
monitors, err := model.MonitorByUserID(userID)
if err != nil {
log.Println(err)
monitors = []model.Monitor{}
}
// Display the view
v := view.New(r)
v.Name = "monitor/read"
v.Vars["first_name"] = sess.Values["first_name"]
v.Vars["monitors"] = monitors
v.Render(w)
}
И, наконец, мой шаблон
<table class="table table-striped table-hover">
<tr>
<th scope="col-9">Monitor</th>
<th scope="col-3">Action</th>
</tr>
{{range $n := .monitors}}
<tr>
<td>{{.Name.DomainName}}</td>
<td><a title="Edit Monitor" class="btn btn-warning" role="button" href="{{$.BaseURI}}monitor/update/{{.MonitorID}}">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit
</a>
<a title="Delete Monitor" class="btn btn-danger" role="button" href="{{$.BaseURI}}monitor/delete/{{.MonitorID}}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete
</a>
</td>
</tr>
{{end}}
</table>
Но там написано
Template File Error: template: read.tmpl:27:47: executing "content" at <.Name.DomainName>: can't evaluate field DomainName in type string
Как мне этого добиться?