考虑一下带有postgresql:的Rails 6.1中的这个例子
CCD_ 1具有CCD_;pictures
item
具有_and_belongs_to_manypictures
和belong_to一个organization
一个user
有_and_belongs_to_manyitems
,而belongs_to一个organization
,具有关系organization
0
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)
,但这会返回一个数组,然后我必须使用数组方法进行排序和分页,这是不可取的。
我还有什么其他选择?我似乎也无法使用users
0。
更新:一个我认为会"工作"的解决方案最初是这样做的,也是我现在要做的,从两个联接表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)