【发布时间】:2011-10-16 01:50:59
【问题描述】:
我需要创建一个用户Friendship (user1_id, user2_id) 模型来连接用户。
我希望避免为每个用户/朋友创建两条 Friendship 记录,因为友谊是双向的。
你会如何做到这一点,同时有点简单
# User.rb
has_many :friendships
has_many :friends, :through => :friendships, :class_name => "User"
编辑 我的解决方案是镜像记录:
class Friendship < ActiveRecord::Base
belongs_to :user1
belongs_to :user2
after_create :create_mirror!
after_destroy :destroy_mirror!
validate :does_not_exist
def mirror_record
Friendship.where(:user1_id => user2.id, :user2_id => user1.id).first
end
private
def does_not_exist
errors.add(:base, 'already exists') if Friendship.where(:user1_id => user1.id, :user2_id => user2.id) rescue nil
end
def create_mirror!
Friendship.create(:user1 => user2, :user2 => user1)
end
def destroy_mirror!
mirror_record.destroy if mirror_record
end
end
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3.1 rails-models