我正面临着一个棘手的挑战。让我解释一下我想要实现的目标。如果用户使用Facebook登录我的应用程序,我会抓取他们所有的Facebook朋友UID,并将这些存储为用户的“facebook_friends”。然后,一旦登录,用户就会看到即将发生的事件列表,如果有任何与会者与用户的Facebook好友的UID匹配,我想查看每个事件,并将其突出显示给他们。
我选择按如下方式创建Event.rb模型:
class Event < ActiveRecord::Base
# id :integer(11)
has_many :attendances, as: :attendable
has_many :attendees
def which_facebook_friends_are_coming_for(user)
matches = []
self.attendees.each do |attendee|
matches << user.facebook_friends.where("friend_uid=?", attendee.facebook_id)
end
return matches
end
end
你可以看到我已经创建了 which_facebook_friends_are_coming_for(用户)方法,但它让我感到非常低效。当我从控制台运行它时,它确实有效,但如果我尝试以任何形式(如YAML)转储它,我会被告知无法转储匿名模块。我认为这是因为现在'匹配'持有人不是这样的类(当它应该是FacebookFriends时)。
必须有更好的方法来做到这一点,我会喜欢一些建议。
作为参考,其他类看起来像这样:
class User < ActiveRecord::Base
# id :integer(11)
has_many :attendances, foreign_key: :attendee_id, :dependent => :destroy
has_many :facebook_friends
end
class FacebookFriend < ActiveRecord::Base
# user_id :integer(11)
# friend_uid :string
# friend_name :string
belongs_to :user
end
class Attendance < ActiveRecord::Base
# attendee_id :integer(11)
# attendable_type :string
# attendable_id :integer(11)
belongs_to :attendable, polymorphic: true
belongs_to :attendee, class_name: "User"
end
答案 0 :(得分:2)
这样的事情:
def which_facebook_friends_are_coming_for(user)
self.attendees.map(&:facebook_id) & user.facebook_friends.map(&:friend_uid)
end
&amp; operator只返回两个数组的交集