2011-11-05 21 views
1
def add_like user_id 
    $redis.sadd "likes:#{_id}", user_id 
end 

def remove_like user_id 
    $redis.srem "likes:#{_id}", user_id 
end 

def likes 
    return $redis.scard("likes:#{_id}") 
end 

非常簡單的代碼添加喜歡。事情是,我想在控制器中輕鬆找回它們。例如當我做@event = Event.find(params[:id]我想能夠訪問視圖中的喜歡作爲@event.likesRedis,Mongoid,Rails - 使用視圖中的redis屬性

對此提出建議?

更重要的是,我想檢查當前用戶是否喜歡這個。我在哪裏放這個代碼?在控制器中?使用liked_this?這個味道迭代所有事件。

回答

1

編輯:這是我從內存鍵入代碼時發生的情況。對於ActiveRecord,self.id返回當前記錄的主鍵,這是一個整數,除非您有意將其設置爲其他值。對於Mongoid,self.id改爲返回BSON::ObjectId。您需要Redis的字符串鍵,因此您必須在BSON對象上調用to_s,如下所示:self.id.to_s

在您的視圖中添加@event.likes的功能很簡單。該likes方法添加到您的模型,像這樣:

def Event 
    def likes 
    $redis.scard("likes:#{self.id.to_s}") # return is not necessary 
    end 
end 

如果你想使用mongoid來檢查當前用戶喜歡事件,而無需遍歷每一個事件,你需要存儲喜歡在MongoDB中,而不是Redis的。

+0

這不適合我,我發佈什麼解決了這個問題。 – CamelCamelCamel

0

在模型:

after_initialize :likes 

def likes 
    return self['likes'] = $redis.scard("likes:#{_id}") 
end 

我不知道是什麼原因,this page in the docs helped me,我不喜歡我的巧合/直覺編程這個事實。