[RUBY] [Rails] Memo zur Implementierung der Kommentarfunktion

Am Anfang

Ein Memorandum über die Möglichkeit, Beiträge zu kommentieren

Annahme

Umgebung Ruby 2.6-Serie Schienen 5.2 Serie

Bibliothek  devise  Slim

__ Rails-App-Vorlage für die oben genannte Umgebung __ Vorgehensweise zum Einrichten der Rails-Anwendung und zum Installieren von devise and Slim

__ ↓ Bild nach Implementierung der Kommentarfunktion ↓ __ ezgif.com-video-to-gif (1).gif

Implementierung

1. Modellgestaltung

スクリーンショット 2020-06-09 21.23.55.png

-Benutzer und Beitrag sind Eins-zu-Viele-Beziehungen, in denen der Benutzer viele Beiträge hat.

2. Modellerstellung

$ rails g devise User

$ rails g model Post post_content:string user:references 
$ rails g model Comment comment_content:string user:references post:references

-Wenn Sie Referenzen angeben, legt die Migrationsdatei automatisch einen externen Schlüssel fest (erforderlich).

3. Bestätigen und verknüpfen Sie Modelle und Migrationen.

Benutzertabelle

class DeviseCreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" . . #<Kürzung> . . add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true end end


 > Benutzermodell

>```ruby:app/models/user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
 
  has_many :posts, dependent: :destroy
  has_many :comments  #User.Sie können benutzereigene Kommentare mit Kommentaren erhalten.
end

Beiträge Tabelle

class CreatePosts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.text :post_content t.references :user, foreign_key: true   t.timestamps end end end


 > Postmodell

>```ruby:app/models/post.rb
class Post < ApplicationRecord
  belongs_to :user
  has_many :comments, dependent: :destroy  #Post.Sie können die Kommentare des Beitrags mit Kommentaren abrufen.
end

Kommentartabelle

class CreateComments < ActiveRecord::Migration[5.2] def change create_table :comments do |t| t.text :comment_content t.references :user, foreign_key: true t.references :post, foreign_key: true   t.timestamps end end end


 > Kommentarmodell

>```ruby:app/models/comment.rb
class Comment < ApplicationRecord
  belongs_to :user  #Comment.Holen Sie sich den Kommentarbesitzer mit dem Benutzer
  belongs_to :post  #Comment.Holen Sie sich den Beitrag mit diesem Kommentar zum Beitrag
end

4. Controller erstellen

$ rails g controller posts index show
$ rails g controller comments

4-1. Erstellen eines Post-Controllers

app/controllers/posts_controller.rb


class PostsController < ApplicationController

  #Überprüfen Sie den Anmeldestatus des Benutzers. Der Index kann ohne Anmeldung angezeigt werden.
  before_action :authenticate_user!, only: [:show, :create]

  def index
    @posts = current_user.posts.all  #Holen Sie sich alle, um die Liste der Beiträge anzuzeigen
    @post = current_user.posts.new   #Da auf dem Beitragslistenbildschirm ein neuer Beitrag erstellt wird, rufen Sie das Beitragsobjekt für den Formularparameter ab.
  end

  def show
    @post = Post.find(params[:id])
    @comments = @post.comments  #Holen Sie sich alle Kommentare zu Post-Details
    @comment = current_user.comments.new  #Da Kommentare auf dem Bildschirm mit den Beitragsdetails veröffentlicht werden, erhalten Sie ein Kommentarobjekt für die Formularparameter.
  end


  def create
    @post = current_user.posts.new(post_params)
    if @post.save
      redirect_back(fallback_location: root_path)  #Wechseln Sie nach dem Senden eines Kommentars zur vorherigen Seite.
    else
      redirect_back(fallback_location: root_path)  #Das gleiche wie oben
    end
  end

  private
  def post_params
    params.require(:post).permit(:post_content)
  end
end

-Die ID des angemeldeten Benutzers wird in allen Posts und Kommentaren gespeichert, die als aktueller_Benutzer erfasst wurden. Es ist verfügbar, weil die in der Modelldatei vorgenommene Zuordnung und die Einführung des Geräts vorgenommen wurden.

4-2.comments Erstellen eines Controllers

app/controllers/comments_controller.rb


class CommentsController < ApplicationController

  def create
    @comment = current_user.comments.new(comment_params)
    if @comment.save
      redirect_back(fallback_location: root_path)  #Wechseln Sie nach dem Senden eines Kommentars zur vorherigen Seite.
    else
      redirect_back(fallback_location: root_path)  #Das gleiche wie oben
    end
  end

  private
  def comment_params
    params.require(:comment).permit(:comment_content, :post_id)  #in Form posten_ID-Parameter senden und zum Kommentar posten_Es ist notwendig, die ID zu speichern.
  end
end

5. Ansicht erstellen

5-1. Erstellen einer Beitragslistenansicht

ruby:app/views/posts/index.html.slim


h2 post

= form_with model: @post do |f|
   = f.text_area :post_content, placeholder: 'Text'
   = f.submit


h2 post liste

- @posts.each do |post|
   = link_to post.post_content, post

= link_to 'Zuhause', root_path

5-2. Erstellen einer Bildschirmansicht mit Post-Details (erstellen Sie auch ein Kommentar-Posting-Formular und eine Ansicht der Kommentarliste)

ruby:app/views/posts/show.html.slim


h2 post details

= @post.post_content

h2 einen Kommentar abgeben

= form_with(model:[@post, @comment], method: :post) do |f|
  = f.text_area :comment_content
  = f.hidden_field :post_id, value: @post.id
  = f.submit 'Kommentieren'

h2 Kommentarliste

- @comments.each do |comment|
  = comment.comment_content  #Der Inhalt des Kommentars wird angezeigt

= link_to 'Zuhause', root_path

-``` Modell: [@post, @comment] `` `Beschreibung für den Zugriff auf verschachteltes Routing. Wenn Sie zwei Argumente nicht richtig angeben, wird es nicht richtig gesendet.

-Im versteckten Eingabefeld wird der Wert post.id mit dem Parameter post_id gesendet. Zum Speichern in der post_id der Kommentartabelle.

6. Erstellen Sie ein Routing

config/routes.rb


Rails.application.routes.draw do
  devise_for :users  #Von devise erstelltes Routing für die Benutzerauthentifizierung

  root to: 'posts#index'  #Der Startbildschirm ist auf den Listenbildschirm eingestellt

  resources :posts do  #Sendet das Routing an den Controller
    resources :comments, only: [:create]  #Kommentare Routing zum Controller
  end
end

Damit ist die Implementierung der Kommentarfunktion abgeschlossen.

Artikel, die ich als Referenz verwendet habe

[Lassen Sie uns mit Rails eine Kommentarfunktion erstellen](https://qiita.com/nojinoji/items/2034764897c6e91ef982#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3% E3% 83% B3% E3% 82% B0% E3% 81% AE% E4% BD% 9C% E6% 88% 90-1)

Recommended Posts

[Rails] Memo zur Implementierung der Kommentarfunktion
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Rails Grundgerüst für die Implementierung der CRUD-Funktion
[Schienen] gem'payjp'implementierungsverfahren
Implementierung der Kommentarfunktion (Ajax)
Implementierung der Fuzzy-Suchfunktion für Schienen
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Kommentarfunktion (Registrierung / Anzeige / Löschung)
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
[Ruby on Rails] Implementierung einer ähnlichen Funktion
Implementierung der DM-Funktion
[Rails] Ich werde die Prozedur zum Implementieren der Follow-Funktion mit form_with erklären.
[Schienen] Kategoriefunktion
Schienen folgen der Funktion
Kommentarfunktion implementiert
[Rails] Benachrichtigungsfunktion
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails 6.0] Implementierungsverfahren für "Easy Login" für das Portfolio erforderlich
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
Ruby on Rails Implementierung der automatischen Mail-Sendefunktion
Implementierung der Suchfunktion Lernnotiz (Portfolioerstellung)
[Rails / devise] Implementierung der Funktion zum Bearbeiten von Kontoinformationen / Verfahren zum Ändern des Umleitungsziels
[Rails] Implementierungsverfahren, wenn der Buchungsfunktion öffentliche / private Funktionen hinzugefügt werden
Implementierung der Rails-Hashtag-Suche
Implementierung des Rails6-Countdown-Timers
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
[Implementierungsverfahren] Implementieren Sie die Funktion zum Hochladen von Bildern mit Active Storage
Implementierung der Rails CRUD-Funktion ② (diesmal bearbeitet und detailliert)
Docker x Rails 6 (Memo)
Implementierung der Suchfunktion
Rails Heroku-Bereitstellungsverfahren
Rails + ElasticSearch Survey Memo
[Rails] Tag-Ranking-Funktion
Implementierung der Bildvorschau-Funktion
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
Implementierung der Pagenationsfunktion
Suchfunktion [Implementierung kopieren und einfügen]
Schienen, RSpec-Installationsverfahren