Ein Memorandum zur Implementierung der Kommentarfunktion für Beiträge.
Terminal
% rails g model Comment comment_text:text user:references post:references
% rails g controller Comments
% rails db:migrate
Assoziation zum Modell hinzugefügt.
Kommentar Modell
belongs_to :post # Comment.Erhalten Sie kommentierte Beiträge auf Beitrag
belongs_to :user # Comment.Holen Sie sich einen Kommentarbeitrag mit dem Benutzer
Benutzermodell
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy # User.Erhalten Sie Benutzerkommentare mit Kommentaren
validates :comment_text, presence: true, length: { maximum: 1000 } #Überprüfen Sie den Himmel, begrenzen Sie die Anzahl der Zeichen usw. ..
Postmodell
belongs_to :user
has_many :comments, dependent: :destroy # Post.Holen Sie sich Kommentare für diesen Beitrag mit Kommentaren
Detailseite
-#Kommentaranzeige
= @comments.each do |c|
= c.user.name
- if c.user.id == @post.user.id #Artikelautor
%p Gepostet von
= simple_format(c.comment_text) #Anzeige mit Zeilenumbrüchen
= link_to 'Löschen', post_comment_path(@post, c), data: {confirm: '本当にLöschenしますか?'}, method: :delete
-#Um einen Kommentar zu löschen,@Post (Eltern), @Muss in Kommentaren an c übergeben werden
-#Einen Kommentar posten
= form_for [@post, @comment], local: true do |f| #Da der Kommentar mit dem Beitrag verknüpft ist, schreiben Sie ihn als Array
= f.text_area :comment_test
= f.submit "Post"
Stellen Sie das Routing so ein, dass es mit der Listenanzeigeseite verknüpft ist.
routes.rb
resources :posts do #Nest, um auf Beiträge zu verlinken
resources :comments, only: [:create, :destroy]
end
Registrierungs- / Löschaktion kommentieren (erstellen / zerstören).
Terminal
% rails g controller comments
Kommentare Controller
before_action :set_post
before_action :authenticate_user! #Nur zulässig, wenn Sie angemeldet sind
def create
@comment = @post.comments.create(comment_params)
if @comment.save
redirect_to blog_path(@post) notice: 'Kommentiert'
else
flash.now[:alert] = 'Kommentar fehlgeschlagen'
render post_path(@post)
end
end
def destroy
@comment = Comment.find(params[:id])
if @comment.destroy
redirect_to post_path(@post), notice: 'Kommentar gelöscht'
else
flash.now[:alert] = 'Kommentar konnte nicht gelöscht werden'
render post_path(@post)
end
end
private
def set_post
@post = Post.find(params[:post_id])
end
def comment_params
params.required(:comment).permit(:comment_text).merge(user_id: current_user.id, post_id: params[:post_id])
end
Da die Kommentarliste auch auf der Beitragsseite (show) angezeigt wird, können Kommentardaten mit posts # show abgerufen werden.
Beiträge Controller
:
def show
@post = Post.find(params[:id])
@comment = Comment.new #Erstellen Sie eine Instanz für ein Formular(Zum Hinzufügen von Kommentaren)
@comments = @post.comments #Zur Anzeige der Kommentarliste
end
:
Recommended Posts