2014-06-17 36 views
0

我有表blogs,我想在用戶進入博客頁面時在列views中添加一個。如何在sinatra中使用ruby進行此更新查詢?

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只

回答

-1

導軌主要是語法糖,而不是木製品m AGIC。在你的情況下執行任務的最有效的方法是:

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

這會生成查詢(比如id = 1):

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

但我使用西納特拉,和你的語法給了我錯誤 – AliOsm

1

(該問題有任何關於末日,只是續集,這是。西納特拉的不是一部分,而是獨立的庫)

你可以這樣做:

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

或者只是這樣的:

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

我嘗試它,但它是在1次刷新不加1 3或2或5,你能幫幫我嗎? – AliOsm

+0

現在,我認爲這個問題真的與Sinatra有關。你能否展示更多你的應用程序,並描述你如何接收多次添加? – zverok

+0

顯示您的路由器頁面非常不尋常的條目在檢索和演示中非常不尋常的條目。 但是,當您輸入主頁的條目時,如果在條目「F5」或「刷新」中重新加載頁面時添加1,則會添加多於1,例如,添加4或3或2或5或6這是問題所在。 – AliOsm