2013-09-22 3 views
1

Теперь у меня есть 3 моделиfind_or_create_by во многих ко многим

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 ».

Как я могу решить эту проблему?

+0

эта проблема специфична для '' has_many' с through'. Одним из решений является добавление валидности уникальности в группе и сохранение его до db перед назначением, но это может подойти вашим требованиям. – tihom

ответ

0

Если вы выполните следующие действия только одна группа будет создана

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 
Смежные вопросы