У вас действительно есть два отношения здесь. У вас есть:
- Отклоненная дружба со стороны
profile_id
- Отклоненная дружба со стороны
friend_id
Я не знаю, почему обе стороны могут отклонить дружбу, и, возможно, вам нужно немного посмотреть на вашу модель (какая сторона запрашивает ее? сказать, что это было отклонено со стороны profile
?
Во всяком случае, я бы смоделировал это как два отдельных отношения:
class Profile
has_many :rejected_friendships, :conditions => 'friendships.profile_rejected = 1'
has_many :canceled_friendships, :foreign_key => 'friend_id', :conditions => 'friendships.friend_rejected = 1'
named_scope :banned, lambda do |*banned|
{ :conditions => {:banned => banned.empty? ? 1 : (banned.first ? 1 : 0) } }
end
has_many :rejected_friends, :class_name => 'Profile', :through => :rejected_friendships
has_many :canceled_friends, :class_name => 'Profile', :through => :canceled_friendships
def removed_friends
(self.rejected_friends.banned(false).all + self.canceled_friends.banned(false).all).uniq
end
end
Это несколько нежелательно, так как remove_friends больше не является отношением, поэтому вы больше не можете делать такие вещи, как Profile.removed_friends.find(:all, :conditions => {:name => "bleh"})
, но это довольно сложный случай. Это условие довольно сложное.