如何将一个记录关系与同一模型的另一个模型关系结合起来



考虑一下带有postgresql:的Rails 6.1中的这个例子

CCD_ 1具有CCD_;pictures

item具有_and_belongs_to_manypictures和belong_to一个organization

一个user有_and_belongs_to_manyitems,而belongs_to一个organization,具有关系organization0

CCD_ 11属于CCD_;has_and_belongs_to_manyusers

pictures只能由组织的管理员查看,并且这些用户已经/属于他们。因此,对于用户来说,做current_user.pictures这样简单的事情会向他们显示允许他们查看的所有图片。(在本例中,管理员上传图片并与某些用户共享)

这就是我的问题所在:

图片也可以标记为public,这将允许任何用户在其列表中查看它们。因此,从本质上讲,我希望将organization.pictures.where(public: true)current_user.pictures(使用联接表)组合到一个查询中,并轻松添加任何sql顺序或分页。

我可以简单地使用级联current_user.pictures + organization.pictures.where(public: true),但这会返回一个数组,然后我必须使用数组方法进行排序和分页,这是不可取的。

我还有什么其他选择?我似乎也无法使用users0。

更新:一个我认为会"工作"的解决方案最初是这样做的,也是我现在要做的,从两个联接表has_many :pictures, through: :items中提取ID,但我仍然想找到更好的方法;在用户模型中:

def viewable_pictures
pictures_ids = pictures.pluck(:id)
organization.pictures.public_to_daycare.or(Picture.where(id: pictures_ids))
end

在这种情况下,我认为查询来自图片模型,而不是组织对象。类似于:

Picture.where(public: true, organization_id: organization.id).or(Picture.where(user_id: current_user.id)