2011-01-22 5 views
0

私はソーシャルネットワークを構築しています。私は友情の関係にこだわっています。
表の友情::友情モデルで友情協会の問題

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. は多くを持っている:友情モデルの確認をfalseに設定し、私はソースよさrequests_sent番号(USER_ID)
  2. は多くを持っています:request_recieved#フレンドシップモデルでの確認がfalseに設定されていて、私がターゲット(friend_id)である場合
  3. 多くの:フレンドシップモデルでの確認がtrueに設定されていて、 (user_id)またはターゲット(friend_id)

    私が書いたコードからわかるように、条件=> 'confirmed = false'を入れようとしましたが、レールはFriendshipモデルではなくユーザーモデルに条件を適用します。これは私の3を達成する正しい方法ではありません目標は、モデルユーザーの無料の方法で? TNX

私は私のモデルを変更したくないPSは、私は、既存のもののためのソリューションを持っていると思い

答えて

2

オプションはnamed_scopeよう友情モデルに条件を置くことであろうあなたのような何かをすることができるはずです:

@user.friends.confirmed