【问题标题】:How can I do this update query in ruby with sinatra?如何使用 sinatra 在 ruby​​ 中执行此更新查询?
【发布时间】:2014-08-07 06:08:44
【问题描述】:

我有表blogs,当用户进入博客页面时,我想在views 列中添加一个。

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

但是当我在+中进入博客页面时它给了我错误

: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

【问题讨论】:

    标签: ruby sinatra sequel


    【解决方案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')
    

    【讨论】:

    • 我试过了,但它是添加 3 或 2 或 5 合 1 刷新而不是 1,你能帮我吗?
    • 现在,我认为这个问题确实与 Sinatra 有关。能否请您展示更多您的应用程序,并描述您是如何收到多个添加的?
    • 显示你的路由器页面 Entries 在检索和呈现中非常不寻常的条目。但是当你进入首页的条目是加1的时候从条目内重新加载页面时“F5”或“刷新”会加1以上,例如加4或3或2或5或6这样是问题所在。
    【解决方案2】:

    Rails 主要是语法糖,而不是 Woodoo 魔法。在您的情况下,执行任务的最有效方法是:

    DB[:blogs].update_all("views = views + 1", ["id = ?", params[:id]])
    

    这将生成查询(比如id = 1):

    UPDATE "blogs" SET views = views + 1 WHERE (id = 1) 
    

    【讨论】:

    • 但我使用的是 sinatra ,你的语法给了我错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多