如何在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)