通过比较rails

时间:2016-09-21 01:41:06

标签: ruby-on-rails ruby activerecord

我有这样的结构:

排名 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

谢谢!

0 个答案:

没有答案