我有表blogs
,当用户进入博客页面时,我想在列views
中添加一个。
DB[:blogs].where(:id => params[:id]).update(:views => :views + 1)
但是当我进入+
中的博客页面时,它给了我错误未定义的方法`+' for:views:Symbol
我这样做:
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
答案 0 :(得分:1)
(问题没有关于Sinatra,只有Sequel,它不是Sinatra的一部分,而是独立的库。)
你可以这样做:
DB[:blogs].where(:id => params[:id]).
update(Sequel.expr(:views) => Sequel.expr(:views) + 1)
或者只是这个:
DB[:blogs].where(:id => params[:id]).
update('views = views + 1')
答案 1 :(得分:-1)
Rails主要是语法糖,而不是木头魔术。在您的情况下,执行任务的最有效方法是:
DB[:blogs].update_all("views = views + 1", ["id = ?", params[:id]])
这将生成查询(例如id = 1
):
UPDATE "blogs" SET views = views + 1 WHERE (id = 1)