[RUBY] Implementieren Sie die Anwendungsfunktion in Rails

Ich werde erklären, wie die Post-Application-Funktion implementiert und die Funktion mit Rails abgebrochen wird.

Implementierungsablauf

Als grobe Strömung werden wir es durch das folgende Verfahren implementieren.

  1. Erstellen Sie eine Zwischentabelle zwischen Stellen und Bewerbern
  2. Verknüpfen Sie Modelle miteinander
  3. Routing definieren
  4. Definieren Sie die Anwendungsfunktion und die Abbruchfunktion in der Steuerung
  5. Erstellen Sie eine Ansicht der Anwendungsschaltfläche

Erstellen Sie eine Zwischentabelle zwischen Stellen und Bewerbern

Beiträge können mehrere Bewerber haben, und Benutzer können mehrere Beiträge abonnieren. Infolgedessen haben Posts und Benutzer eine Viele-zu-Viele-Beziehung und benötigen eine Zwischentabelle.

Auch hier definieren wir den Antragsteller als "Abnehmer", um zwischen dem Poster und dem Antragsteller auch innerhalb desselben Benutzers zu unterscheiden. Wenn der Modellname des Beitrags "Beitrag" lautet, sollten Sie eine Zwischentabelle mit dem Namen "post_takers" erstellen.

Um eine Zwischentabelle zu erstellen, geben Sie zunächst den folgenden Befehl in das Terminal ein, um ein Modell zu erstellen.

$ rails g model PostTaker

Öffnen Sie die fertige Migrationsdatei und schreiben Sie wie folgt.

2020XXXXXXXXXX_create_post_takers.rb


class CreatePostTakers < ActiveRecord::Migration[6.0]
  def change
    create_table :post_takers do |t|
      t.references :post, foreign_key: true
      t.references :taker, foreign_key: {to_table: :users} 
      t.timestamps
    end
  end
end

Der Punkt hier ist der Teil von t.references: taker, Foreign_key: {to_table :: users}. Wenn Sie so schreiben, können Sie auf die Benutzertabelle verweisen, während Sie den Namen des Antragstellers "Abnehmer" als externen Schlüssel der Zwischentabelle definieren. Referenzartikel: https://qiita.com/publichtml/items/1fba15d8071fab66d043

Verknüpfen Sie Modelle miteinander

Schreiben Sie als Nächstes die Zuordnung in das Modell.

user.rb


class User < ApplicationRecord
  has_many :post_takers, foreign_key: "taker_id", dependent: :destroy
end

post.rb


class Post < ApplicationRecord
  has_many :post_takers, dependent: :destroy
  has_many :takers, through: :post_takers, dependent: :destroy
end

post_taker.rb


class PostTaker < ApplicationRecord
  belongs_to :taker, class_name: 'User', foreign_key: 'taker_id'
  validates_uniqueness_of :post_id, scope: :taker_id
end

`Gehört zu: Taker, Klassenname: 'Benutzer', Fremdschlüssel: 'Taker_ID' in post_taker.rb ist Wenn Sie auf diese Weise schreiben, können Sie dem Antragsteller das Benutzermodell zuordnen. Referenzartikel: https://qiita.com/gyu_outputs/items/421cc1cd2eb5b39e20ad

Außerdem lautet validates_uniqueness_of: post_id, scope :: taker_id Wir haben eine solche Validierung geschrieben, um zu verhindern, dass mehr als eine Kombination aus Post und Bewerber registriert wird.

Routing definieren

Beschreiben Sie die Aktion zum Anwenden als "Nehmen" und die Aktion zum Abbrechen als "Abbrechen" im Routing wie folgt.

routes.rb


Rails.application.routes.draw do
  resources :posts do
    member do
      get 'take'
      get 'cancel'
    end
  end
end

Oben wird das Mitglied verwendet, um die ID des Beitrags in den Pfad aufzunehmen. Referenzartikel: https://qiita.com/hirokihello/items/fa82863ab10a3052d2ff

Anwendungsfunktion definieren und Funktion in der Steuerung abbrechen

Fügen Sie dem Controller die folgende Beschreibung hinzu.

posts_controller.rb


class PostsController < ApplicationController
  before_action :set_post

  def show
    @user = @post.user
  end

  def take
    #Erstellen Sie einen Datensatz der Zwischentabelle zwischen dem Beitrag und dem angemeldeten Benutzer
    PostTaker.create(post_id: @post.id, taker_id: current_user.id)
    #Flash-Nachricht anzeigen (Wenn Sie die Flash-Nachricht nicht anzeigen möchten, müssen Sie sie nicht schreiben.)
    flash[:notice] = 'Der Antrag ist vollständig.'
    #Weiterleiten, um Detailseite zu posten
    redirect_to action: "show"
  end

  def cancel
    #Extrahieren Sie Datensätze des entsprechenden Beitrags und des angemeldeten Benutzers aus der Zwischentabelle
    post_taker = PostTaker.find_by(post_g_id: @post.id, taker_id: current_user.id)
    post_taker.destroy
    flash[:notice] = 'Die Stornierung ist abgeschlossen.'
    redirect_to action: "show"
  end

  private

  def set_post
    @post = Post.find(params[:id])
  end
end

Erstellen Sie eine Ansicht der Anwendungsschaltfläche

Erstellen Sie zum Schluss eine Ansicht der Anwendungsschaltfläche und fertig! Der folgende Code ist in haml geschrieben.

show.html.haml


-#Schaltfläche "Anzeigen" nur, wenn das Poster und der angemeldete Benutzer nicht übereinstimmen
- if @user.id != current_user.id
  -#Fälle werden danach klassifiziert, ob der angemeldete Benutzer in den Bewerbern für die betreffende Stelle enthalten ist oder nicht.
  - if @post.taker_ids.include?(current_user.id)
    = link_to "Anwendung abbrechen", cancel_posts_path(@post.id), data: { confirm: "Möchten Sie die Bewerbung für diesen Beitrag stornieren?" }
  - else
    = link_to "Anwenden", take_posts_path(@post.id), data: { confirm: "Möchten Sie sich für diese Stelle bewerben?" }

Recommended Posts

Implementieren Sie die Anwendungsfunktion in Rails
Implementieren Sie eine einfache Anmeldefunktion in Rails
Implementieren Sie die CSV-Download-Funktion in Rails
Implementieren Sie die Nachsuchfunktion in der Rails-Anwendung (where-Methode).
Markdown in Rails implementiert
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Implementieren Sie die Sternebewertungsfunktion mit Raty in Rails 6
[Schienen] Implementieren Sie die Benutzersuchfunktion
Implementieren Sie die LTI-Authentifizierung in Rails
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] Implementieren Sie die Registrierungs- / Löschfunktion für Kreditkarten in PAY.JP
Fügen Sie eine Suchfunktion in Rails hinzu.
Implementieren Sie die PHP-Implodierungsfunktion in Java
Implementieren Sie ein Kontaktformular in Rails
Implementieren Sie die Spring Boot-Anwendung in Gradle
Implementieren Sie die Anmeldefunktion in Rails einfach mit Name und Passwort (1)
Implementieren Sie die Anmeldefunktion in Rails einfach mit nur einem Namen und einem Passwort (2).
Implementieren Sie die Anmeldefunktion in Rails einfach mit Name und Passwort (3).
Implementieren Sie die Benutzerregistrierungsfunktion und die Unternehmensregistrierungsfunktion separat in Rails devise
[Rails] Implementieren Sie die Funktion zur Beantragung / Genehmigung einer Community-Mitgliedschaft mithilfe von Many-to-Many-Zuordnungen
[Rails] Eine einfache Möglichkeit, eine Selbsteinführungsfunktion in Ihrem Profil zu implementieren
So implementieren Sie Suchfunktionen in Rails
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
Ich habe versucht, die Ajax-Verarbeitung der ähnlichen Funktion in Rails zu implementieren
Implementieren Sie die Rails-Paginierung
[Schienen] Kategoriefunktion
Group_by in Rails
Schienen folgen der Funktion
Rails 6 (standardmäßig mit Webpacker) implementiert die Sternebewertungsfunktion
So implementieren Sie Ranking-Funktionen in Rails
Implementieren Sie Schaltflächenübergänge mit link_to in Rails
[Rails] Benachrichtigungsfunktion
Nuxt.js × Erstellen Sie eine Anwendung im Rails-API-Modus
Implementieren Sie eine Freigabeschaltfläche in Rails 6, ohne Gem zu verwenden
Buchungsfunktion implementiert durch asynchrone Kommunikation in Rails
So implementieren Sie eine ähnliche Funktion in Rails
Implementieren Sie Iterationen in View, indem Sie eine Sammlung rendern [Rails]
Einfache Benachrichtigungsfunktion in Rails (nur wenn befolgt)
Modellassoziation in Rails
Hinzufügen von Spalten in Rails
Deaktivieren Sie Turbolinks in Schienen
[Rails] Tag-Ranking-Funktion
Rails-Konto-BAN implementieren
^, $ im regulären Ausdruck von Rails
Verwenden Sie Bilder mit Schienen