我有用户、组和成员资格。我使用成员资格联接表在用户和组之间建立了 has_many 关系。我想要做的是设置一个 after_create 回调,每当用户创建新组时,该回调都会将新记录添加到成员资格表中,这样创建者就自动成为该组的成员。
现在,用户可以创建群组,但该群组将显示有 0 名成员,并且用户必须加入该群组。如果我尝试从组控制器更新成员资格模型,如何通过回调自动执行该部分?
用户.rb
class User < ApplicationRecord
has_many :created_groups, class_name: "Group"
has_many :memberships
has_many :groups, through: :memberships
end
Run Code Online (Sandbox Code Playgroud)
组.rb
class Group < ApplicationRecord
belongs_to :creator, class_name: "User"
has_many :memberships
has_many :users, through: :memberships
end
Run Code Online (Sandbox Code Playgroud)
会员资格.rb
class Membership < ApplicationRecord
belongs_to :user
belongs_to :group
end
Run Code Online (Sandbox Code Playgroud)
组控制器.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
Run Code Online (Sandbox Code Playgroud)
set_membership 部分是我完全迷失的地方。我只需要获取创建的组的 id 并使用它来创建新的成员资格(使用当前用户 id)。
我将转到set_membership模型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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |