我正在建立一个社交网络,我陷入了友谊关系中。这些是我的数据:
表友谊:
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。 我想在模型用户中获得的是:
有很多:朋友#当友谊模型中的确认设置为true而我是源(user_id)或目标(friend_id)
你可以从我发布的代码中注意到我试图把:condition =&gt;'confirmed = false',但是rails将条件应用于用户模型,而不是友谊模型,所以这不是正确的方法实现我的3个目标,在模型用户中使用免费方法? TNX
P.S我不想改变我的模型,我只想为现有模型找到解决方案
答案 0 :(得分:2)
一个选项是将友情模型中的条件作为named_scope,然后您应该能够执行以下操作:
@user.friends.confirmed