Rails after_create 回调来更新不同的模型

ddo*_*che 4 ruby-on-rails

我有用户、组和成员资格。我使用成员资格联接表在用户和组之间建立了 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)。

Ger*_*rry 5

我将转到set_membership模型Groupactive_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)