[RUBY] Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen

Erstellen einer Gruppenfunktion (Bulletin Board-Stil) mit Rails


Entwicklungsumgebung

  1. ruby 2.6.3
  2. Rails 5.1.6
  3. AWS Cloud9
  4. GitHub
  5. sqlite3 (Entwicklungsumgebung)

Design Konzept

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

Das ER-Diagramm sieht so aus. (Es tut mir leid für die Handschrift ...)

Modell-

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

Regler

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.

Recommended Posts

Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe versucht, eine Nachrichtenfunktion der Rails Tutorial-Erweiterung (Teil 1) zu erstellen: Erstellen Sie ein Modell
Erstellen Sie trotzdem eine Anmeldefunktion mit Rails
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe versucht, eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 3) zu erstellen: Ein Missverständnis der Spezifikationen wurde behoben
Ich habe versucht, eine Nachrichtenfunktion für die Erweiterung Rails Tutorial (Teil 2) zu erstellen: Erstellen Sie einen Bildschirm zum Anzeigen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, den Block mit Java zu brechen (1)
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
Ich habe versucht, mit HCE-F von Android eine Funktion zu implementieren, die Felica Lite entspricht
Einführung von # 10 devise_token_auth zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Einführung des Experten Nr. 15 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Ich habe versucht, mit Javafx ein einfaches Spiel zu machen ① "Lass uns Glücksspiel finden" (unvollendet)
Ich möchte eine Funktion in der Rails Console definieren
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Ich habe versucht, ein einfaches Spiel mit Javafx zu machen ① "Lass uns Glücksspiel finden" (unvollendete Version ②)
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich möchte eine Liste mit Kotlin und Java erstellen!
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
[Unity] Ich habe mit NWPathMonitor ein natives Plug-In UniNWPathMonitor erstellt
Ich habe versucht, eine einfache Anwendung mit Dockder + Rails Scaffold zu erstellen
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Ich habe versucht, mit Web Assembly zu beginnen
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 2 ~ Grundlegende Schreibweise für Dash ~ erstellt
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
# 16 Richtlinieneinstellung zum Erstellen einer Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6
# 8 Seed-Implementierung zum Erstellen einer Bulletin Board-API mit Zertifizierungsautorisierung in Rails 6
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Ich habe versucht, eine einfache Gesichtserkennungs-Android-Anwendung mit OpenCV zu erstellen
[Rails] Ich habe versucht, eine Transaktion zu implementieren, die mehrere DB-Prozesse kombiniert
Ich habe versucht, ein automatisches Backup mit angenehmem + PostgreSQL + SSL + Docker zu erstellen
Ich habe einen Arbitrage-Transaktionsbot für virtuelle Währungen erstellt und versucht, Geld zu verdienen
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6 # 13 Grant-Authentifizierungsheader
Einführung des Serializers Nr. 9 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board