私はトリッキーな挑戦に立ち向かっています。私が実現しようとしていることを説明しましょう。ユーザーが 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(user)メソッドを作成したことがわかりますが、信じられないほど非効率的だと思います。コンソールから実行すると機能しますが、任意の形式 (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