Прежде всего, согласно тому, что вы написали, в группе может быть несколько пользователей, но пользователь может быть только частью одной группы.
Обычно группа может иметь несколько членов иПользователь может быть членом нескольких групп.Для этого вы создаете модель ассоциации под названием membership
.
Итак, ваша пользовательская модель имеет:
has_many :memberships
has_many :groups, :through => :memberships
А ваша групповая модель имеет:
has_many :memberships
has_many :members, :through => memberships
Ассоциация будет иметь собственную таблицу, которая будет выглядеть примерно так:
create_table "memberships" do |t|
t.integer "group_id"
t.integer "user_id"
t.timestamps
end
add_index :memberships, :group_id
add_index :memberships, :user_id
Чтобы ответить на исходный вопрос, нужно ли создавать группу при создании пользователя независимо от того, как онсоздан, я бы создал обратный вызов активной записи в пользовательской модели:
after_create :create_group
def create_group
# whatever logic and create group
end
Для получения дополнительной информации об обратных вызовах активной записи см. http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
Если группа, к которой вы создаете, относитсяинформация вводится в форму (представление) и не имеет прямого отношения к пользователю, тогда вам придется заняться созданием группы в контроллере.Что-то вроде:
def create
@group = Group.build(params[:group])
@group.save!
@user = User.build(params[:user])
@user.group_id = @group.id
@user.save!
end
Или более чистым способом:
def create
@group = Group.build(params[:group])
@group.save!
@user = @group.users.build(params[:user])
@user.save!
end