Un mémorandum sur la possibilité de commenter les posts
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 ↓ __
-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.
$ 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).
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
$ rails g controller posts index show
$ rails g controller comments
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.
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
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
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.
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.
[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