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

时间:2014-06-17 09:31:12

标签: ruby sinatra sequel

我有表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

2 个答案:

答案 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)