Entwicklungsumgebung
Benutzer können frei Gruppen erstellen und können zu Gruppen gehören, die von anderen Benutzern erstellt wurden. Mitglieder, die der Gruppe beitreten, können auch innerhalb der Gruppe frei sprechen.
Wenn Sie diesen Mechanismus auf den Tisch legen, Da Benutzer und Gruppen eine Viele-zu-Viele-Beziehung haben, verwenden wir eine Zwischentabelle. Und da es eine Viele-zu-Viele-Beziehung zwischen Benutzern und Posts innerhalb der Gruppe gibt, verwenden wir auch eine Zwischentabelle.
Das ER-Diagramm sieht so aus. (Es tut mir leid für die Handschrift ...)
Das zuvor erwähnte ER-Diagramm weist die folgenden Assoziationen auf.
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: 'Ich habe eine Gruppe erstellt'
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
Das grundlegende Design ist das gleiche wie beim Benutzer.
def show
.
.
if [email protected]?(current_user)
@group.users << current_user
end
end
Auf diese Weise können Personen, die dem Link einer Gruppe folgen, zu dieser Gruppe gehören.
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
Dies hat auch die gleiche Form wie die zuvor erstellte Buchungsfunktion.
Damit ist die 2-Kanal-Kleingruppenfunktion (Bulletin Board-Stil) abgeschlossen. Als zukünftige Aufgabe möchte ich beim Erstellen einer Gruppe sperren und eine Gruppe nur mit Einladung erstellen können.