[RUBY] [Rails] Commentaire mémo de procédure d'implémentation

Au début

Un mémorandum sur la possibilité de commenter les posts

supposition

environnement Série Ruby 2.6 Série Rails 5.2

Bibliothèque  devise  Slim

__ Modèle d'application Rails pour l'environnement ci-dessus __ Procédure pour configurer l'application Rails et installer l'appareil et Slim

__ ↓ Image après avoir implémenté la fonction de commentaire ↓ __ ezgif.com-video-to-gif (1).gif

la mise en oeuvre

1. Conception du modèle

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

-Utilisateur et Publication sont des relations un-à-plusieurs dans lesquelles l'utilisateur a de nombreux messages. -Une relation plusieurs-à-plusieurs où l'utilisateur a de nombreux commentaires et la publication a également de nombreux commentaires. -Créez une table intermédiaire et ajoutez une colonne comment_content pour stocker le propriétaire du commentaire (user_id), le message qui possède le commentaire (post_id) et le contenu du commentaire pour chaque enregistrement.

2. Création de modèles

$ rails g devise User

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

-Depuis l'installation de devise, le modèle utilisateur est créé avec la commande devise.

-Si vous spécifiez des références, le fichier de migration définira automatiquement une clé externe (obligatoire).

3. Confirmez et associez les modèles et les migrations.

table des utilisateurs

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: "" . . #<réduction> . . add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true end end


 > Modèle utilisateur

>```ruby:app/models/user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
 
  has_many :posts, dependent: :destroy
  has_many :comments  #User.Vous pouvez obtenir des commentaires appartenant à l'utilisateur avec des commentaires.
end

table des poteaux

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


 > Modèle de poste

>```ruby:app/models/post.rb
class Post < ApplicationRecord
  belongs_to :user
  has_many :comments, dependent: :destroy  #Post.Vous pouvez obtenir les commentaires appartenant à la publication avec des commentaires.
end

tableau des commentaires

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


 > Modèle de commentaire

>```ruby:app/models/comment.rb
class Comment < ApplicationRecord
  belongs_to :user  #Comment.Obtenir le propriétaire du commentaire avec l'utilisateur
  belongs_to :post  #Comment.Obtenez le post avec ce commentaire sur le post
end

4. Créer un contrôleur

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

4-1. Création d'un contrôleur de posts

app/controllers/posts_controller.rb


class PostsController < ApplicationController

  #Vérifiez l'état de connexion de l'utilisateur. L'index peut être consulté sans se connecter.
  before_action :authenticate_user!, only: [:show, :create]

  def index
    @posts = current_user.posts.all  #Tout obtenir pour afficher la liste des articles
    @post = current_user.posts.new   #Puisqu'une nouvelle publication est faite sur l'écran de la liste des publications, récupérez l'objet Post pour le paramètre de formulaire.
  end

  def show
    @post = Post.find(params[:id])
    @comments = @post.comments  #Obtenir tous les commentaires associés aux détails de l'article
    @comment = current_user.comments.new  #Puisque les commentaires sont publiés sur l'écran des détails de l'article, obtenez un objet Comment pour les paramètres du formulaire.
  end


  def create
    @post = current_user.posts.new(post_params)
    if @post.save
      redirect_back(fallback_location: root_path)  #Après avoir envoyé un commentaire, redirigez vers la page précédente.
    else
      redirect_back(fallback_location: root_path)  #Comme ci-dessus
    end
  end

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

-L'identifiant de l'utilisateur connecté est stocké dans tous les messages et commentaires acquis en tant que current_user. Il est disponible car l'association faite dans le fichier modèle et l'introduction du dispositif ont été faites.

4-2.comments Création d'un contrôleur

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)  #Après avoir envoyé un commentaire, redirigez vers la page précédente.
    else
      redirect_back(fallback_location: root_path)  #Comme ci-dessus
    end
  end

  private
  def comment_params
    params.require(:comment).permit(:comment_content, :post_id)  #poster en forme_Envoyer le paramètre d'identifiant et publier pour commenter_Il est nécessaire de stocker l'identifiant.
  end
end

5. Créer une vue

5-1. Créer une vue de liste d'articles

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


poste h2

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


Liste des messages h2

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

= link_to 'domicile', root_path

5-2. Créer une vue d'écran des détails de l'article (créer également un formulaire de publication de commentaires et une vue de la liste des commentaires)

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


détails de la publication h2

= @post.post_content

h2 faire un commentaire

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

Liste de commentaires h2

- @comments.each do |comment|
  = comment.comment_content  #Le contenu du commentaire s'affiche

= link_to 'domicile', root_path

· `Modèle: [@post, @comment]` `Description pour accéder au routage imbriqué. Si vous ne donnez pas correctement deux arguments, ils ne seront pas envoyés correctement.

-Dans le champ de saisie masqué, la valeur post.id est envoyée avec le paramètre post_id. À stocker dans le post_id de la table Comment.

6. Créer un routage

config/routes.rb


Rails.application.routes.draw do
  devise_for :users  #Routage pour l'authentification des utilisateurs créé par l'appareil

  root to: 'posts#index'  #L'écran d'accueil est réglé sur l'écran de la liste des publications

  resources :posts do  #Acheminement des messages vers le contrôleur
    resources :comments, only: [:create]  #commentaires Acheminement vers le contrôleur
  end
end

-En imbriquant les ressources de commentaires dans les ressources de publications, il est pratique de spécifier un chemin tel que post_comments_path.

Ceci termine l'implémentation de la fonction de commentaire.

Articles que j'ai utilisés comme référence

[Faisons une fonction de commentaire avec Rails](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] Commentaire mémo de procédure d'implémentation
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Échafaudage de procédure d'implémentation de fonction CRUD de base
[rails] gem'payjp'implementation procedure
Implémentation de la fonction de commentaire (Ajax)
Implémentation de la fonction de recherche floue Rails
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
[Rails] Ajout de la fonction de commentaire Ruby On Rails
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
[Ruby on rails] Implémentation d'une fonction similaire
Implémentation de la fonction DM
[Rails] Je vais expliquer la procédure d'implémentation de la fonction follow en utilisant form_with.
[Rails] Fonction de catégorie
Les rails suivent la fonction
Fonction de commentaire implémentée
[Rails] Fonction de notification
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails 6.0] Procédure d'implémentation "Easy login" requise pour le portfolio
[JQuery] Procédure d'implémentation de la fonction de saisie semi-automatique [Java / Spring]
Ruby on Rails Implémentation de la fonction d'envoi automatique de courrier
Mise en place de la fonction de recherche Mémo d'apprentissage (création de portfolio)
[Rails / appareil] Implémentation de la fonction d'édition des informations de compte / Procédure de changement de destination de la redirection
[Rails] Procédure de mise en œuvre lorsque des fonctions publiques / privées sont ajoutées à la fonction de publication
Implémentation de la recherche par hashtag Rails
Implémentation du compte à rebours Rails6
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
[Procédure de mise en œuvre] Implémentez la fonction de téléchargement d'images avec Active Storage
Implémentation de la fonction Rails CRUD ② (édité et détaillé cette fois)
Docker x Rails 6 (Mémo)
Implémentation de la fonction de recherche
Procédure de déploiement de Rails Heroku
Rails + Mémo d'enquête ElasticSearch
[rails] fonction de classement des balises
Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Mise en œuvre de la fonction de pagénation
Fonction de recherche [implémentation copier-coller]
Rails, procédure d'installation RSpec