2014-03-25 53 views
0
def show 
    Bottle.increment_counter :views, @bottle 
end 

工作得很好,但是如果同一個人一遍又一遍地看它,它會不斷遞增。我應該如何解決這個問題,讓唯一的命中增加它?創建簡單的點擊計數器

我應該有一個ip模型,並使我的Bottle模型have_many ips,ips是誰訪問它的人?然後,做東西這個? (我提取出來變成一個類的方法,但是這僅僅是給你看):

def show 
    if [email protected]?(request.remote_ip) 
     Bottle.increment_counter :views, @bottle 
     Ip.create(bottle_id: @bottle, ip: request.remote_ip) 
    end 
end 

我覺得上面會的工作,但不會這個結果在數據庫中非常迅速填滿?或者這是一種習慣,不管?如果這不是一種做法,我怎麼能以某種方式對cookie進行同樣的操作? cookie的結構是什麼?

另外,我知道有一堆命中計數器的寶石,但我想這樣做我自己(在您的幫助:P)

回答

0

我將它設置在一個cookie,你可以查看怎麼做here。這也允許靈活性,所以如果你想跟蹤用戶視圖,如果他們每週查看一次或其他。

2

有關請求的IP地址的事情是,你可以爲每個人都在同一網絡中相同的IP地址(這只是你可能會看到的IP地址),即使在內部的網絡中,它們各自顯然有自己的IP地址。

...在你的控制器

def show 
    # see if they already have a cookie, if so 
    # it will create a cookie with the Hit id you created 
    if cookies.has_key?(:unique_hit_key) 
    hit = Hit.find(cookies[:unique_hit_key]) 
    hit.count = hit.count.to_i+1 
    hit.save 
    else 
    cookies[:unique_hit_key] = { 
     :value => Hit.create(count: 1).id, 
     :expires => 1.year.from_now, 
     :domain => 'domain.com' 
    } 
    end 
end 

這並不追蹤IP,但你真的不需要它。如果您沒有看到其中的cookie,則會根據您設置的cookie保留所有訪問者的人數。這假設鬆散,你不必擔心人們擦掉他們的cookies。如果你需要在這個更好的控制,你需要很可能是通過登錄跟蹤等

+0

這正是我一直在尋找! – Doctor06