我有两个模型,通过另一个模型定义了多对多关系。在这种情况下,用户属于许多组。每个组可以有很多用户。 这种关系是通过会员制模式定义的,会员制模式也具有会员资格,即
user.rb
class User < ApplicationRecord
has_many :memberships
has_many :groups, through: :memberships
end
group.rb
class Group < ApplicationRecord
has_many :memberships
has_many :users, through: :memberships
end
membership.rb
class Membership < ApplicationRecord
belongs_to :user
belongs_to :group
enum status: [ :non_member, :pending, :member ]
end
当我创建一个新组时,它总是为创建它的用户创建一个成员资格。其他用户以后会为组创建成员资格。
在我的一个视图中,我想显示当前用户所属的所有组。所以我可以这样做:
<% @user.groups.each do |group| %>
<p><%= group.name %>
<% end %>
然后,我想要显示用户不属于的所有组,以便他们可以请求加入。我尝试了这个,但它返回所有记录,即使我的用户是一个组的成员。
<% Group.joins(:users).where.not(:users => { :id => current_user.id }).each do |group| %>
有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
class User < ApplicationRecord
has_many :memberships
has_many :groups, through: :memberships
def unjoined_groups
Group.where.not(id: group_ids)
end
def unjoined_groups_by_membership_status(status)
Group.includes(:memberships)
.where.not(id: group_ids)
.where(memberships: { status: status })
end
end
Try this instead...