1
我有用户,组和会员资格。我通过使用成员关系连接表在用户和组之间建立了has_many关系。我想要做的是设置一个after_create回调函数,当用户创建一个新组时,会在成员资格表中添加一条新记录,创建者自动成为该组的成员。Rails 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并使用它创建新的成员资格(使用当前用户标识)。
这工作,我只是不得不重新将current_user.id与id,因为我猜你不能在模型中调用current_user。用户ID在创建时会在组中设置,所以我可以使用它。 – ddonche
你说得对,我只是更新了答案。虽然注意到我使用'user_id'(我猜你的意思是这个)而不是'id'(它有组ID)。 – Gerry