Ein Memorandum über die Möglichkeit, Beiträge zu kommentieren
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 ↓ __
-Benutzer und Beitrag sind Eins-zu-Viele-Beziehungen, in denen der Benutzer viele Beiträge hat.
$ 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).
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
$ rails g controller posts index show
$ rails g controller comments
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.
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
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
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.
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.
[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