从一组用户获取用户ID的数组

时间:2012-01-12 18:14:39

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

我正在使用amistad gem来处理好友关系。用户具有与之关联的事件。我想根据他们与朋友的关系为给定用户提供活动信息。

我使用了http://ruby.railstutorial.org中的以下代码来跟踪关系。但是对于amistad,我没有 user.friend_ids 方法只有 user.friends 方法。

如何通过 user.friends 调用获取类似的Feed结果类型(可以分页,以及所有这些),它会为我提供一个用户对象列表,而不仅仅是ID? / p>

class Micropost < ActiveRecord::Base

  default_scope :order => 'microposts.created_at DESC'

  # Return microposts from the users being followed by the given user.
  scope :from_users_followed_by, lambda { |user| followed_by(user) }

  private

    # Return an SQL condition for users followed by the given user.
    # We include the user's own id as well.
    def self.followed_by(user)
      following_ids = %(SELECT followed_id FROM relationships
                        WHERE follower_id = :user_id)
      where("user_id IN (#{following_ids}) OR user_id = :user_id",
            { :user_id => user })
    end
end

这主要是伪代码,因为它不起作用,但这是我认为我想在代码中完成的事情:

class Event< ActiveRecord::Base

  default_scope :order => 'event.created_at DESC'

  # Return events from friends of a user.
  scope :from_friends, lambda { |user| friends_of(user) }

  private

    # Return an SQL condition for users followed by the given user.
    # We include the user's own id as well.
    def self.friends_of(user)
      friend_ids = %(SELECT friendIDs FROM friendships)
      where("user_id IN (#{friend_ids})")
    end
end

1 个答案:

答案 0 :(得分:0)

您可以手动将friend_ids方法添加到User模型。

def friend_ids
  self.friends.map(&:id)
  //Here, I'm iterating over user.friends array and getting an array of ids
end

编辑:根据您的评论,我假设您已正确构建用户和事件之间的关联。
例如,用户有许多事件,事件属于用户/多个用户(取决于您的要求。)

正确设置关联后,您只需查看使用上面user_ids方法获得的friend_ids的事件。