如何在ruby中使用sinatra执行此更新查询?

如何在ruby中使用sinatra执行此更新查询?,ruby,sinatra,sequel,Ruby,Sinatra,Sequel,我有一个表blogs,当用户进入blog页面时,我想在列视图中添加一个 DB[:blogs].where(:id => params[:id]).update(:views => :views + 1) 但是当我在中进入博客页面时,它给了我错误+ 未定义的方法“+”用于:视图:符号 我要这样做: blog = DB[:blogs].where(:id => params[:id]).first views = blog[:views] + 1 DB[:blogs].where

我有一个表
blogs
,当用户进入blog页面时,我想在列
视图中添加一个

DB[:blogs].where(:id => params[:id]).update(:views => :views + 1)
但是当我在中进入博客页面时,它给了我错误+

未定义的方法“+”用于:视图:符号

我要这样做:

blog = DB[:blogs].where(:id => params[:id]).first
views = blog[:views] + 1
DB[:blogs].where(:id => params[:id]).update(:views => views)

但这是添加3或5或1或4,而不仅仅是1。Rails主要是语法上的糖分,而不是woodoo魔法。在您的情况下,执行任务的最有效方式是:

DB[:blogs].update_all("views = views + 1", ["id = ?", params[:id]])
这将生成查询(例如
id=1
):

(问题与Sinatra无关,只是Sequel,它不是Sinatra的一部分,而是独立的库。)

您可以这样做:

DB[:blogs]。其中(:id=>params[:id])。
更新(Sequel.expr(:视图)=>Sequel.expr(:视图)+1)
或者仅仅是这样:

DB[:blogs]。其中(:id=>params[:id])。
更新('views=views+1')

但我使用的是sinatra,您的语法给了我错误我尝试过,但它是3或2或5合1刷新而不是1,您能帮我吗?现在,我想这个问题确实与sinatra有关。请您展示更多您的应用程序,并描述您是如何收到数千条添加内容的?在检索和展示非常不寻常的内容时,展示您的路由器页面条目非常不寻常的条目。但是,当您输入正在添加1的主页条目时,从条目“F5”或“Refresh”中重新加载页面时,将添加多个条目,例如,添加4或3或2或5或6,这就是问题所在。
UPDATE "blogs" SET views = views + 1 WHERE (id = 1)