In the application, I will use totally different query for the second query. The second query will be quite long
SELECT SIMILARITYquery. In this question, I give simple query to make it easier to understand
我需要在模板中打印来自 PostgreSQL 的数据。一切正常,但输出 HTML 有额外的 range。
下面是 HTML 输出。您可以看到没有值的额外 range:
<table>
<tr>
<th>Title</th>
<th>Content</th>
</tr>
<tr>
<td>Nation</td>
<td>Nation has various meanings, and the meaning has changed over time</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
<h1>ID number:</h1>
<h3></h3>
<h3>5</h3>
下面是server.go
package main
import (
"database/sql"
"github.com/labstack/echo"
_ "github.com/lib/pq"
"html/template"
"io"
"log"
"net/http"
)
type Gallery struct {
Title, Content, Idnumber string
}
type (
Template struct {
templates *template.Template
}
)
func (t *Template) Render(w io.Writer, name string, data interface{}) *echo.HTTPError {
if err := t.templates.ExecuteTemplate(w, name, data); err != nil {
return &echo.HTTPError{Error: err}
}
return nil
}
func main() {
e := echo.New()
db, err := sql.Open("postgres", "user=postgres password=apassword dbname=lesson4 sslmode=disable")
if err != nil {
log.Fatal(err)
}
t := &Template{
templates: template.Must(template.ParseFiles("public/views/testhere.html")),
}
e.Renderer(t)
e.Get("/post/:uritext", func(c *echo.Context) *echo.HTTPError {
rows, err := db.Query("SELECT title, content FROM gallery WHERE uri=$1", c.Param("uritext"))
anotherquery, err := db.Query("SELECT id AS idnumber FROM gallery WHERE uri=$1", c.Param("uritext"))
if err != nil {
log.Fatal(err)
}
gallery := []Gallery{}
for rows.Next() {
g := Gallery{}
err := rows.Scan(&g.Title, &g.Content)
if err != nil {
log.Fatal(err)
}
gallery = append(gallery, g)
}
for anotherquery.Next() {
g := Gallery{}
err := anotherquery.Scan(&g.Idnumber)
if err != nil {
log.Fatal(err)
}
gallery = append(gallery, g)
}
return c.Render(http.StatusOK, "onlytestingtpl", gallery)
})
e.Run(":4444")
}
下面是模板public/views/testhere.html
{{define "onlytestingtpl"}}
<table>
<tr>
<th>Title</th>
<th>Content</th>
</tr>
{{range.}}
<tr>
<td>{{.Title}}</td>
<td>{{.Content}}</td>
</tr>
{{end}}
</table>
<h1>ID number:</h1>
{{range.}}
<h3>{{.Idnumber}}</h3>
{{end}}
{{end}}
我对模板中的 range 有感觉,但我不知道,因为没有错误。
最佳答案
我觉得很合适。您正在运行两个单独的查询:
rows, err := db.Query("SELECT title, content FROM gallery WHERE uri=$1", c.Param("uritext"))
anotherquery, err := db.Query("SELECT id AS idnumber FROM gallery WHERE uri=$1", c.Param("uritext"))
然后从两者创建一个 slice :
gallery = append(gallery, g)
gallery = append(gallery, g)
所以你有两行:
{ "Nation", "Nation...", 0 }
{ "", "", 5 }
这是你想要的吗?如果您希望它们合并,您只需将查询更改为:
SELECT title, content, id as idnumber FROM gallery WHERE uri=$1
如果你想要两个单独的列表,那么也许你应该有两个单独的类型:
type Gallery struct {
Title, Content string
}
type IDNumber string
构建两个单独的列表并使用组合对象进行渲染:
type Model struct {
Galleries []Gallery
IDNumbers []IDNumber
}
return c.Render(http.StatusOK, "onlytestingtpl", Model{
Galleries: galleries,
IDNumbers: idnumbers,
})
你的模板以:
结尾{{range .Galleries}}
<tr>
<td>{{.Title}}</td>
<td>{{.Content}}</td>
</tr>
{{end}}
关于sql - 戈朗 : Multiple SQL query generate extra empty {{range. }},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329793/
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案
我正在使用Rails4应用程序,它需要创建大量对象以响应来自另一个系统的事件。当我调用create!时,主键列上出现非常频繁的ActiveRecord::RecordNotUnique错误(由PG::UniqueViolation引起)我的模型之一。我在SO上找到了其他答案,建议挽救异常并调用retry:beginTableName.create!(data:'here')rescueActiveRecord::RecordNotUnique=>eife.message.include?'_pkey'#Onlyretryprimarykeyviolationslog.warn"Retr
我有一个PORO(普通旧Ruby对象)来处理一些业务逻辑。它接收一个ActiveRecord对象并对其进行分类。为了简单起见,以下面为例:classClassificatorSTATES={1=>"Positive",2=>"Neutral",3=>"Negative"}definitializer(item)@item=itemenddefnameSTATES.fetch(state_id)endprivatedefstate_idreturn1if@item.value>0return2if@item.value==0return3if@item.value但是,我还想根据这些st
我正在使用ARincludes在对象User和Building之间执行LEFTOUTERJOIN的方法,其中User可能有也可能没有Building关联:users=User.includes(:building).references(:buildings)因为我正在使用references,任何关联的Building对象都将被预先加载。我的期望是我随后能够遍历用户列表,并检查用户是否有与其关联的建筑物而不会触发额外的查询,但实际上每当我尝试访问建筑物属性时我都会看到对于没有建筑物的用户,AR会进行另一个SQL调用以尝试检索该建筑物(尽管在后续尝试中它只会返回nil)。这些查询显然是
我有以下模型:activity.rbtag.rbtagging.rb标签是事件和标签的连接模型。我想搜索具有2个或更多标签的事件。我如何在Rails中执行此操作?例如:我有tag1=Christmas,tag2=Florida,tag3=John如果存在,我想找到tag1、tag2和tag3存在的Activity。[编辑]我最终做了什么:tags=[tag1,tag2,tag3]activities=[]tags.eachdo|tag|activities如果任何组值的大小等于tags.size,则该事件包含所有标签。 最佳答案 如
在我的Rails应用程序中,我有users,它可以有许多invoices,而invoices又可以有许多payments。现在在dashboardView中,我想总结一个user曾经收到的所有payments,按年、季度或月。付款也分割为毛额、Netty和税额。user.rb:classUser:items).allpayments_with_invoice.select{|x|range.cover?x.date}.sum(&:"#{kind}_amount")endend发票.rb:classInvoicepayment.rb:classPaymentdashboards_cont