id = current_user.id
@given_gifts = User.find(id).following_users.includes(:given_gifts).collect{|u| u.given_gifts}.flatten
@received_gifts = User.find(id).following_users.includes(:received_gifts).collect{|u| u.received_gifts}.flatten
@gifts = @given_gifts.zip(@received_gifts).flatten.compact
我正在尝试检索当前用户所关注的所有用户收到的礼物列表。 有更好的方法吗?结果全部乱序,并显示一些重复。我正在尝试做一个有效的查询,我可以分页。
在我的 User.rb
中has_many :given_gifts, class_name: 'Gift', foreign_key: 'giver_id'
has_many :received_gifts, class_name: 'Gift', foreign_key: 'receiver_id'
acts_as_followable
acts_as_follower
在我的 Gift.rb
中belongs_to :giver, class_name: 'User'
belongs_to :receiver, class_name: 'User'
对于以下功能,我正在使用acts_as_follower gem。
答案 0 :(得分:1)
尝试这样的事情:
following_user_ids = current_user.following_users.pluck(:id)
Gift.where("(giver_id IN ?) OR (receiver_id IN ?)",
following_user_ids, following_user_ids).order(:created_at)
基本上,这会获取following_users id的列表,然后使用OR查询来获取列表中任何用户给出或接收的礼物。
此查询的性能取决于底层数据库和您正在处理的记录数。但对于以下用户的小数量(< = 100),它通常会表现良好。随着following_user_ids数量的增加,性能将下降。