[RUBY] [Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen

Was willst du tun

Implementieren Sie einen Antrags- / Genehmigungsmechanismus

Speziell?

"Ein Benutzer (Konishi) möchte einer bestimmten Community beitreten. Dies ist ein Implementierungsbeispiel für den Fall, dass ein Abonnement die Genehmigung des Community-Administrators (Onishi) erfordert.

Raues Bild

キャプチャ.PNG

Übersicht über den Verarbeitungsablauf

  1. Auf dem entsprechenden Community-Bildschirm drückt der Benutzer (Konishi) auf die Schaltfläche "Übernehmen".
  2. Der Benutzer (Konishi) wird zur Warteliste der Anwendung der jeweiligen Community hinzugefügt. Der Administrator überprüft den Bildschirm mit der Warteliste für Anwendungen der entsprechenden Community und entscheidet, ob der Antragsteller genehmigt wird.
  3. Um den Antrag zu genehmigen, drücken Sie die Genehmigungstaste. Der antragstellende Benutzer tritt der Community bei und wird von der Warteliste des Antragstellers entfernt.
  4. Um den Antrag abzulehnen, drücken Sie die Schaltfläche Ablehnen. Es wird von der Warteliste der Anwendung gelöscht.

Umgebung

Ruby 2.6.5 Rails 5.2.4.2 mysql 5.7

Konfiguration der aktuellen Anwendungsfunktionen

Ich erstelle eine Anwendung, mit der Benutzer verschiedenen Communities angehören können. --Benutzermodell: Enthält Benutzerinformationen zur Verwendung der App

Die folgende Quelle ist nur ein Auszug aus dem zugehörigen Teil

user.rb


class User < ApplicationRecord

  has_many :belongings, dependent: :destroy
  has_many :applies, dependent: :destroy
  has_many :communities, through: :belongings #Die Community, zu der der Benutzer gehört

end

community.rb


class Community < ApplicationRecord
    has_many :belongings, dependent: :destroy
    has_many :applies, dependent: :destroy
    has_many :users, through: :belongings #Benutzer, die zur Community gehören

    #Gibt true zurück, wenn der Benutzer einer Community angehört
    def user_belonging?(user)
      users.include?(user)
    end

end

belonging.rb


class Belonging < ApplicationRecord
    belongs_to :user
    belongs_to :community
    validates :user_id, presence: true
    validates :community_id, presence: true

    validates  :user_id, uniqueness: { scope: :community_id }
    validates  :community_id, uniqueness: { scope: :user_id }

end

Fügen Sie ein Anwendungsmodell hinzu und behalten Sie den Anwendungsstatus bei.

Anwenden Anwenden Fügen Sie Modellrouting, Controller und Ansichtsdateien hinzu.

Routing (Auszug)

routes.rb


Rails.application.routes.draw do
  root 'home#index'

  resources :communities do
    resources :applies, only: %i[index create destroy]
    resources :belongings, only: %i[index create destroy]
  end

  resources :users, only: [:index, :show]

end

1. Auf dem entsprechenden Community-Bildschirm drückt der Benutzer (Konishi) auf die Schaltfläche "Übernehmen".

--Anwendungsschaltfläche (auf dem Community-Detailbildschirm platziert) (views/communities/show.html.erb)

show.html.erb


<!--Wenn der angemeldete Benutzer zur Community gehört-->
<% if @community.user_belonging?(current_user) %>
    <%= link_to 'Abheben', community_belonging_path(@community, @belonging), method: :delete, data:{ confirm: "Gemeinschaft"#{@community.name}Austritt aus der Mitgliedschaft. Ist es o.k?" } ,class:"mini-red-link-btn font-bold text-line-none" %>
<!--Wenn Sie nicht mit der Community verbunden sind, aber angemeldet sind-->
<% elsif current_user %>
    <% if @apply %>
        <%= link_to 'Stornierung der Anmeldung', community_apply_path(@community, @apply), method: :delete, class: "mini-red-link-btn font-bold text-line-none" %>
    <% else %>
        <%= link_to 'Antrag auf Mitgliedschaft', community_applies_path(@community), method: :post, class: "mini-green-link-btn font-bold text-line-none" %>
    <% end %>

Die Anwendungstaste wird unter den folgenden Bedingungen angezeigt.

  1. Wenn Sie bereits Mitglied der Community sind: Eine Schaltfläche zum Abbestellen wird angezeigt
  2. Wenn Sie der Community noch nicht beigetreten sind: Die Schaltfläche "Anwendung" wird angezeigt
  3. Wenn Sie bereits eine Mitgliedschaft beantragt haben: Zeigen Sie die Schaltfläche zum Stornieren des Antrags an

--Nach dem Drücken der Anwendungstaste (Aktion zum Erstellen erfolgt)

applies_controller.rb


class AppliesController < ApplicationController

  def create
    current_user.applies.create(community_id: apply_params[:community_id])
    redirect_to community_url(apply_params[:community_id]), notice: "Ich habe die Mitgliedschaft beantragt"
  end

  private

    def apply_params
      params.permit(:community_id)
    end

end

Verwenden Sie Ajax nicht und stellen Sie sicher, dass die Umleitung zum selben Bildschirm erfolgt. (Sie können Ajax verwenden)

** Die Anwendungsinformationen werden jetzt zum Anwendungsmodell hinzugefügt. ** ** **

2. Der Benutzer (Konishi) wird zur Warteliste der Anwendung der jeweiligen Community hinzugefügt. Der Administrator überprüft den Bildschirm mit der Warteliste für Anwendungen der entsprechenden Community und entscheidet, ob der Antragsteller genehmigt wird.

Überprüfen Sie als nächstes die Warteliste. Der Administrator (Onishi) öffnet den Bildschirm "Warteliste für Anwendungen" über den entsprechenden Community-Bildschirm.

--Link zum Anwendungswartebildschirm (Community-Detailbildschirm) (views/communities/show.html.erb)

show.html.erb


<% if user_admin_flg(current_user,@community) == 1 %>
    <%= link_to "Warteliste für die Genehmigung", community_applies_path(@community), class:"btn btn-primary" %>
<% end %>

Klicken Sie auf den Link, um den Bildschirm mit der Warteliste für Anwendungen zu öffnen.

index.html.erb


<div class="container applicant-wrapper">
    <h3>Liste der Benutzer, die auf die Genehmigung warten</h3>
    <div class="row">
        <% @applies.each do |app| %>
        <div class="col-6">
            <% if app.user.image.attached? %>
                <%= link_to app.user.image, user_path(app.user), class:"user-icon" %>
            <% else %>
                <%= link_to user_path(app.user) do %>
                    <%= image_tag ("no_image.png "), class:"user-icon" %>
                <% end %>
            <% end %>
            &nbsp<%= app.user.username %><br>
            <%= link_to "Die Genehmigung", community_belongings_path(app.community, user_id: app.user.id, apply_id: app.id), method: :post, class:"mini-green-link-btn font-bold text-line-none" %>
            <%= link_to "Abgelehnt", community_apply_path(app.community, app), method: :delete, class:"mini-red-link-btn font-bold text-line-none" %>
            <br>
        </div>
        <% end %>
    </div>
</div>

Aus dem Anwendungsmodell werden die Anwendungsinformationen für die relevante Community in einer Liste angezeigt. Auf demselben Bildschirm sind auch eine Genehmigungsschaltfläche und eine Ablehnungsschaltfläche angeordnet.

3. Um den Antrag zu genehmigen, drücken Sie die Genehmigungstaste. Der antragstellende Benutzer tritt der Community bei und wird von der Warteliste des Antragstellers entfernt.

Wenn Sie auf die Schaltfläche Genehmigen klicken, wird die folgende Verarbeitung ausgeführt.

  1. Die Erstellungsaktion des Objektcontrollers wird ausgeführt.
  2. Da es von der Warteliste der Anwendung gelöscht wird, werden die entsprechenden Anwendungsinformationen des Modells Anwenden gelöscht.
  3. Wechseln Sie zum Bildschirm mit der Warteliste der Anwendung

belongings_controller.rb


class BelongingsController < ApplicationController

    def create
        @belonging = Belonging.create(community_id: belonging_params[:community_id], user_id: belonging_params[:user_id])
        Apply.find(belonging_params[:apply_id]).destroy!
        redirect_to community_applies_url(@belonging.community), notice:"「#{@belonging.user.username}Aber die Community:#{@belonging.community.name}Ich bin beigetreten."
    end

    private

        def belonging_params
            params.permit(:community_id, :user_id, :apply_id)
        end

end

4. Um den Antrag abzulehnen, drücken Sie die Ablehnungstaste. Es wird von der Warteliste der Anwendung gelöscht.

Wenn Sie die Zurückweisungstaste drücken, wird die folgende Verarbeitung ausgeführt.

applies_controller.rb


class AppliesController < ApplicationController

  def destroy
    @apply = Apply.find(params[:id])
    @apply.destroy!
    @comminity = Community.find(params[:community_id])
    redirect_to community_url(@comminity), notice: ""
  end

end

applies_controller.rb


class AppliesController < ApplicationController

  def create
    current_user.applies.create(community_id: apply_params[:community_id])
    redirect_to community_url(apply_params[:community_id]), notice: "2. Weiterleiten an die Anwendungswarteliste Bildschirm-gilt Die Anwendung für den Beitritt zum Controller wurde abgebrochen. Im Text werden der Apps-Controller und der Besitz-Controller für jede Aktion separat vorgestellt, aber ich werde sie am Ende alle zusammen auflisten. Ich habe die Mitgliedschaft beantragt"
  end

  def destroy
    @apply = Apply.find(params[:id])
    @apply.destroy!
    @comminity = Community.find(params[:community_id])
    redirect_to community_url(@comminity), notice: "Ich habe meine Bewerbung storniert"
  end

  def index
    @applies = Apply.where(community_id: params[:community_id])
  end

  private

    def apply_params
      params.permit(:community_id)
    end

end

belongings_controller.rb


class BelongingsController < ApplicationController

    def create
        @belonging = Belonging.create(community_id: belonging_params[:community_id], user_id: belonging_params[:user_id])
        Apply.find(belonging_params[:apply_id]).destroy!
        redirect_to community_applies_url(@belonging.community), notice:"「#{@belonging.user.username}Aber die Community:#{@belonging.community.name}Ich bin beigetreten."
    end

    def destroy
        @belonging = Belonging.find(params[:id])
        @belonging.destroy!
        @comminity = Community.find(params[:community_id])
        redirect_to community_url(@comminity), notice: "Gemeinschaft"#{@comminity.name}Ich habe mich zurückgezogen."    
    end

    private

        def belonging_params
            params.permit(:community_id, :user_id, :apply_id)
        end

end

Da der Anfänger den Logikcode mit seinem eigenen Verstand dachte und implementierte, Es kann Fehler und bessere Implementierungen geben. Ich würde es begrüßen, wenn Sie darauf hinweisen könnten.

Ich denke, diese Implementierung gibt Ihnen ein besseres Verständnis für die Viele-zu-Viele-Beziehung.

Recommended Posts

[Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen
Implementieren Sie die Anwendungsfunktion in Rails
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Implementieren Sie die Sternebewertungsfunktion mit Raty in Rails 6
Implementieren Sie die Nachsuchfunktion in der Rails-Anwendung (where-Methode).
[Schienen] Implementieren Sie die Benutzersuchfunktion
Suchfunktion mit [Rails] Ransack
[Rails] Implementiere die Event-End-Funktion (logisches Löschen) mit Paranoia (Gem)
Implementieren Sie die Kategoriefunktion mithilfe von Vorfahren
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
[Rails] Einführung von PAY.JP
[Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen
Implementierung der Ajax-Entfernung in Rails
[Rails] Einführung in die Grundlagen der Entwicklung
Verwendung des booleschen Rails-Typs
Informationen zu Arten der Codeabdeckung
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
Implementieren Sie eine einfache Anmeldefunktion in Rails
Implementieren Sie die CSV-Download-Funktion in Rails
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
Implementieren Sie Schaltflächenübergänge mit link_to in Rails