在rails中创建友谊模型关联

时间:2011-12-22 18:14:19

标签: ruby-on-rails ruby-on-rails-3 activerecord activemodel

问题:@ user.friends不起作用。它返回2条记录,它应该是4 ..

我有以下型号:

class User < ActiveRecord::Base
  has_many :friendships
  has_many :friends, 
    :through => :friendships,
    :conditions => "status = 'accepted'", 
    :order => :fname
  has_many :requested_friends, 
    :through => :friendships, 
    :source => :friend,
    :conditions => "status = 'requested'"
  has_many :pending_friends, 
    :through => :friendships, 
    :source => :friend,
    :conditions => "status = 'pending'"

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

出于某种原因。 <%=@user.friends%>未返回所有用户的朋友。

示例数据:

> @user.friendships.all.length
=> 4
> @user.friendships
=> [#<Friendship id: 20, user_id: 11, friend_id: 20, status: "accepted", created_at: "2011-12-22 12:59:22", updated_at: "2011-12-22 17:02:54">, #<Friendship id: 8, user_id: 11, friend_id: 12, status: "accepted", created_at: "2011-12-22 06:29:02", updated_at: "2011-12-22 07:41:24">, #<Friendship id: 3, user_id: 11, friend_id: 1, status: "approved", created_at: "2011-12-22 05:48:29", updated_at: "2011-12-22 06:22:09">, #<Friendship id: 1, user_id: 11, friend_id: 641, status: "approved", created_at: "2011-12-22 04:47:19", updated_at: "2011-12-22 04:47:19">]
> @user.friends.length
=> 2

@ user.friends.length应为4,因为上面的数据显示所有状态为“已接受”。有什么想法我在上面列出的模型协会搞砸了吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

两个友谊的状态为“已批准”,两个为“已接受”状态。这就是为什么它根据你的条件只返回两个接受的友谊。