我有用户,群组和会员资格。我使用成员资格连接表在用户和组之间建立了has_many through关系。我想要做的是设置一个after_create回调,只要用户创建一个新组,就会在会员表中添加一条新记录,这样创建者就会自动成为该组的成员。
现在,用户可以创建一个组,但该组将显示有0个成员,并且该用户必须加入该组。如果我尝试从组控制器更新成员资格模型,如何使用回调自动化该部分?
user.rb
class User < ApplicationRecord
has_many :created_groups, class_name: "Group"
has_many :memberships
has_many :groups, through: :memberships
end
group.rb
class Group < ApplicationRecord
belongs_to :creator, class_name: "User"
has_many :memberships
has_many :users, through: :memberships
end
membership.rb
class Membership < ApplicationRecord
belongs_to :user
belongs_to :group
end
groups_controller.rb
class GroupsController < ApplicationController
after_create :set_membership
def create
@group = current_user.groups.build(group_params)
respond_to do |format|
if @group.save
format.html { redirect_to @group, notice: 'You have a new Group!' }
else
format.html { render :new }
end
end
end
private
def set_membership
end
end
set_membership部分是我完全迷失的地方。我只需要获取创建的组的id并使用它来创建新的成员资格(具有当前用户ID)。
答案 0 :(得分:2)
我会将set_memberhsip
移动到Group
模型(active_create
是模型回调,因此它不能在控制器中工作),并在那里创建Membership
,像这样:
class Group < ApplicationRecord
after_create: set_membership
belongs_to :creator, class_name: "User"
has_many :memberships
has_many :users, through: :memberships
private
def set_membership
Membership.create!(user_id: user_id, group_id: id)
end
end