我有这样的结构:
排名 has_many 请求
请求属于用户
群组 has_many :成员,通过:: Memberships,source :: user
我想让并非所有成员都有特定要求的所有团体。
更新:我有一个表格,我可以搜索个人用户和群组 我可以点击用户并向他/她发送请求(并由此创建请求) 我也可以单击一个组,并以相同的方式向该组中的每个用户发送请求。
该职位有多个请求,一个请求有一个用户。
正如您所看到的,我可以确保搜索结果中没有显示给定位置请求的用户。
底线:如果组中的每个成员都有对指定位置的请求,则该组不应出现在搜索结果中。如果不是该组的所有成员都有请求,则应显示该组。
现在我设法让不属于请求的个人用户:
@users = User.search(query_str).where.not(id: @position.requests)
我正在尝试做类似
的事情@groups = Group.search(query_str).where.not(
@position.request.include?(all users of a Group))
我在Position < ActiveRecord::Base
中制作了一个方法:
def user_exists?(user)
# Check if user exists in position
self.requests.map(&:user_id).include?(user.id)
end
def all_users_exists?(users)
users.each do |user|
unless self.user_exists? user
return false
end
end
true
end
在迭代所有组时,我可以使用此方法过滤出组的方式在视图中,这感觉就像一个糟糕的解决方案。
<% @groups.each do |group| %>
<% unless @position.all_users_exists? group.members %>
# Print list-item...
在查询时,有人可以请求我帮助我在请求中过滤掉所有成员的群组吗?
哦,我正在使用rails 4.2.5
谢谢!