Skip to content

Instantly share code, notes, and snippets.

@radar
Forked from anonymous/Friendship.rb
Last active December 12, 2015 12:48
Show Gist options
  • Save radar/4774265 to your computer and use it in GitHub Desktop.
Save radar/4774265 to your computer and use it in GitHub Desktop.
class Friendship < ActiveRecord::Base
attr_accessible :friend_id, :user_id, :status
belongs_to :user
belongs_to :friend, :class_name => 'User', :counter_cache => :friends_count
def self.request(user, friend)
unless user == friend or Friendship.where(:user_id => user, :friend_id => friend).exists?
transaction do
create({:user => user, :friend => friend, :status => 'pending'}, :without_protection => true)
create({:user => friend, :friend => user, :status => 'requested'}, :without_protection => true)
end
end
end
def self.accept(user, friend)
transaction do
accepted_at = Time.now
accept_one_side(user, friend, accepted_at)
accept_one_side(friend, user, accepted_at)
end
end
def self.accept_one_side(user, friend, accepted_at)
request = find_by_user_id_and_friend_id(user, friend)
request.status = 'accepted'
request.accepted_at = accepted_at
request.save!
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment