Ruby on rails 在多对多模式中查找或创建

Ruby on rails 在多对多模式中查找或创建,ruby-on-rails,Ruby On Rails,现在我有3个模型 Membership: belongs_to :users belongs_to :groups User: has_many: groups, through: :memberships accepts_nested_attributes_for :groups Group: has_many: users, through: :memberships 那么我在做什么呢 u1 = User.new(name: "u1") u2

现在我有3个模型

Membership:
    belongs_to :users
    belongs_to :groups

User: 
    has_many: groups, through: :memberships
    accepts_nested_attributes_for :groups
Group: 
    has_many: users, through: :memberships
那么我在做什么呢

u1 = User.new(name: "u1")
u2 = User.new(name: "u2") 
g1 = Group.new(name: "1")
u1.groups.find_or_create_by g1.attributes
u2.groups.find_or_create_by g1.attributes
u1.save
u2.save
我所期望的是

Groups.all.count == 1
但它总是有“2”


如何解决此问题?

如果执行以下操作,则只会创建一个组

u1 = User.new(name: "u1")
u2 = User.new(name: "u2") 
g1 = Group.find_or_create_by_name(name: "1") #g1 is saved to db here
u1.groups << g1
u2.groups << g1
u1.save
u2.save

Group.all.count
# =>  1
这个问题是许多人所特有的。一种解决方案是在组上添加唯一性验证,并在分配之前将其保存到db,但这可能适合您的需求。