Environnement de développement
Les utilisateurs sont libres de créer des groupes et peuvent appartenir à des groupes créés par d'autres utilisateurs. Les membres qui rejoignent le groupe pourront également s'exprimer librement au sein du groupe.
Si vous mettez ce mécanisme sur la table, Étant donné que les utilisateurs et les groupes ont une relation plusieurs-à-plusieurs, nous utiliserons une table intermédiaire. Et comme il existe une relation plusieurs-à-plusieurs entre les utilisateurs et les publications au sein du groupe, nous utilisons également une table intermédiaire.
Le diagramme ER ressemble à ceci. (Je suis désolé pour l'écriture ...)
Le diagramme ER que j'ai mentionné plus tôt a les associations suivantes.
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: 'J'ai créé un groupe'
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
La conception de base est la même que celle autour de l'utilisateur.
def show
.
.
if [email protected]?(current_user)
@group.users << current_user
end
end
De cette manière, les personnes qui suivent le lien d'un groupe peuvent appartenir à ce groupe.
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
Cela a également la même forme que la fonction de publication créée précédemment.
Avec ce qui précède, la fonction de petit groupe 2 canaux (style tableau d'affichage) est terminée. Dans le cadre d'une tâche future, j'aimerais pouvoir verrouiller lors de la création d'un groupe et créer un groupe sur invitation uniquement.
Recommended Posts