Development environment 
Users are free to create groups and can also belong to groups created by other users. Members who join the group will also be able to speak freely within the group.
If you put this mechanism on the table,
Since users and groups have a many-to-many relationship, we will use an intermediate table.
And since there is a many-to-many relationship between users and posts within the group, we also use an intermediate table.

The ER diagram looks like this. (I'm sorry for handwriting ...)
The previous ER diagram has the following associations.
group.rb
class Group < ApplicationRecord
  validates :name, presence: true, uniqueness: true
  
  has_many :group_users
  has_many :users, through: :group_users
  has_many :groupposts
  accepts_nested_attributes_for :group_users
end
group_user.rb
class GroupUser < ApplicationRecord
  
  belongs_to :group
  belongs_to :user
end
grouppost.rb
class Grouppost < ApplicationRecord
  belongs_to :group
  belongs_to :user
end
groups_controller.rb
class GroupsController < ApplicationController
  def new
    @group = Group.new
    @group.users << current_user
  end
  
  def create
    if Group.create(group_params)
      redirect_to groups_path, notice: 'I created a group'
    else
      render :new
    end
  end
  
  def index
    @groups = Group.all.order(updated_at: :desc)
  end
  
  def show
    @group = Group.find_by(id: params[:id])
    
    if [email protected]?(current_user)
      @group.users << current_user
    end
    
    @groupposts = Grouppost.where(group_id: @group.id).all
  end
  
  private
  def group_params
    params.require(:group).permit(:name, :user_id [])
  end
  
  def grouppost_params
    params.require(:grouppost).permit(:content)
  end
  
end
The basic design is the same as around the user.
def show
.
.
  if [email protected]?(current_user)
   @group.users << current_user
  end
end
In this way, people who follow the link of a group can belong to that group.
grouppost_controller.rb
class GrouppostsController < ApplicationController
  
  def new
    @grouppost = current_user.groupposts.new
    @group = Group.find_by(id: params[:group_id])
  end
  
  def create
    @group = Group.find_by(id: params[:group_id])
    @grouppost = current_user.groupposts.new(grouppost_params)
    @grouppost.group_id = params[:group_id]
    if @grouppost.save
      redirect_to group_path(@group.id)
    end
  end
  
  private
    def grouppost_params
      params.require(:grouppost).permit(:content)
    end
end
This also has the same shape as the posting function created earlier.
With the above, the 2ch small group function (bulletin board style) is completed. As a future task, I would like to be able to lock when creating a group and create an invitation-only group.