Skip to content

Instantly share code, notes, and snippets.

@releu
Created February 18, 2012 19:50
Show Gist options
  • Save releu/1860804 to your computer and use it in GitHub Desktop.
Save releu/1860804 to your computer and use it in GitHub Desktop.
Likable
module Models
module Likable
extend ActiveSupport::Concern
def liked?(record)
$redis.sismember redis_key, record.id
end
def likes_count
$redis.scard redis_key
end
def like(record)
$redis.sadd record.redis_key, id
end
protected
def redis_key
"likes:#{id}:#{self.class.model_name}"
end
end
end
class Post < ActiveRecord::Base
include Models::Likable
end
class PostsController < ApplicationController
def like
post = Post.find(params[:id])
current_user.like(post)
end
end
class User < ActiveRecord::Base
include Models::Likable
end
@pechorin
Copy link

А почему редис?

@releu
Copy link
Author

releu commented Feb 19, 2012

потому что сообщения ищутся простым select * limit и кешируются, но кнопки лайк под сообщением без кеша и при выводе надо знать лайкнул или нет, чтобы вывести правильную кнопку. тогда получается + 50 запросов на страницу на кнопки. лучше они пойдут в редис

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment