友情协会问题

时间:2011-01-22 02:08:55

标签: ruby-on-rails model associations social-networking

我正在建立一个社交网络,我陷入了友谊关系中。这些是我的数据:
表友谊:

 create_table "friendships", :force => true do |t|
t.integer  "user_id"
t.integer  "friend_id"
t.boolean  "confirmed"
t.datetime "created_at"
t.datetime "updated_at"

友谊模式中的协会:

   class Friendship < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, :class_name => "User"

用户模型中的错误关联:

  has_many :friendships #table that contains the reference of friends
  has_many :friends, :through=>:friendships, :conditions => ['confirmed = false'] #my performed request to others friends
  has_many :inverse_friendship, :class_name=>"Friendship", :foreign_key=>"friend_id" #someone requested friendship to me
  has_many :inverse_friends, :through=>:inverse_friendship, :source=>:user

表友谊中确认的布尔值表示如果两个朋友都接受了请求,则在提交朋友请求时默认为false。 我想在模型用户中获得的是:

  1. 有很多:requests_sent#当友谊模型中的确认设置为false而我是源(user_id)
  2. 有很多:request_recieved#当友谊模型中的确认设置为false而我是目标(friend_id)
  3. 有很多:朋友#当友谊模型中的确认设置为true而我是源(user_id)或目标(friend_id)

    你可以从我发布的代码中注意到我试图把:condition =&gt;'confirmed = false',但是rails将条件应用于用户模型,而不是友谊模型,所以这不是正确的方法实现我的3个目标,在模型用户中使用免费方法? TNX

  4. P.S我不想改变我的模型,我只想为现有模型找到解决方案

1 个答案:

答案 0 :(得分:2)

一个选项是将友情模型中的条件作为named_scope,然后您应该能够执行以下操作:

@user.friends.confirmed