[RUBY] J'ai essayé de créer une fonction de groupe (babillard) avec Rails

Création d'une fonction de groupe (style tableau d'affichage) avec Rails


Environnement de développement

  1. ruby 2.6.3
  2. Rails 5.1.6
  3. AWS Cloud9
  4. GitHub
  5. sqlite3 (environnement de développement)

Concept design

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. IMG_8162 (1).jpg

Le diagramme ER ressemble à ceci. (Je suis désolé pour l'écriture ...)

modèle

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

manette

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

J'ai essayé de créer une fonction de groupe (babillard) avec Rails
J'ai essayé de créer une fonction de connexion avec Java
Je veux créer une fonction avec kotlin et java!
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
Créez quand même une fonction de connexion avec Rails
Je souhaite ajouter une fonction de navigation avec ruby on rails
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de casser le bloc avec java (1)
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
J'ai essayé d'implémenter une fonction équivalente à Felica Lite avec HCE-F d'Android
Introduction de # 10 devise_token_auth pour créer une API de tableau d'affichage avec autorisation d'authentification dans Rails 6
Introduction de l'expert n ° 15 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
Je souhaite définir une fonction dans la console Rails
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (version inachevée ②)
J'ai essayé de moderniser une application Java EE avec OpenShift.
Je veux faire une liste avec kotlin et java!
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
J'ai créé un client RESAS-API en Java
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé d'interagir avec Java
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
[Unity] J'ai essayé de créer un plug-in natif UniNWPathMonitor en utilisant NWPathMonitor
J'ai essayé de créer une application simple en utilisant Dockder + Rails Scaffold
J'ai essayé de créer une application Android avec MVC maintenant (Java)
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de démarrer avec Web Assembly
[Retrait des rails] Créez une fonction de retrait simple avec des rails
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~
J'ai essayé de jouer un peu avec BottomNavigationView ①
# 16 paramètre de stratégie pour créer une API de tableau d'affichage avec autorisation de certification dans Rails 6
Implémentation n ° 8 pour créer une API de tableau d'affichage avec autorisation de certification dans Rails 6
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de créer une simple application Android de reconnaissance faciale en utilisant OpenCV
[Rails] J'ai essayé d'implémenter une transaction qui combine plusieurs processus DB
J'ai essayé de faire une sauvegarde automatique avec plus agréable + PostgreSQL + SSL + docker
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 1 Construction de l'environnement
Créer une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 13 Accorder l'en-tête d'authentification
Présentation du sérialiseur n ° 9 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
Créez un tableau d'affichage simple avec Java + MySQL