Ruby on rails 在多对多模式中查找或创建
现在我有3个模型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
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,但这可能适合您的需求。