gpt4 book ai didi

ruby-on-rails - Rails after_create 回调以更新不同的模型

转载 作者:行者123 更新时间:2023-12-04 02:04:52 25 4
gpt4 key购买 nike

我有用户、组和成员资格。我使用成员资格联接表在用户和组之间建立了一个 has_many through 关系。我想要做的是设置一个 after_create 回调,每当用户创建一个新组时,该回调将一条新记录添加到成员资格表中,这样创建者就自动成为该组的成员。

现在,用户可以创建一个组,但是该组将显示有 0 个成员,并且用户必须加入该组。如果我尝试从 Group Controller 更新成员资格模型,如何使用回调自动执行该部分?

用户名

class User < ApplicationRecord
has_many :created_groups, class_name: "Group"
has_many :memberships
has_many :groups, through: :memberships
end

组.rb
class Group < ApplicationRecord 
belongs_to :creator, class_name: "User"
has_many :memberships
has_many :users, through: :memberships
end

成员(member)资格.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)。

最佳答案

我搬家set_membershipGroup模型( active_create 是模型回调,所以它不会在 Controller 中工作),并创建 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

关于ruby-on-rails - Rails after_create 回调以更新不同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44272571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com