Questa è una vecchia questione, ma voglio gettare la mia soluzione, così come README della gemma è ancora inutile dopo tutti questi anni. Si basa sulla risposta di @ Kunday. Quello che segue sarà un tutorial per usare la gemma act_as_commentable per ...
- Permettere agli utenti di creare commenti sotto ogni post.
- Mostra tutti i commenti appartenenti a un post.
Questo presuppone che tu abbia già un "blog" funzionante, che si tratti di foto o post. Installa gem, quindi avvia rails g comment
per iniziare.
Permettere agli utenti di creare commenti sotto ogni post.
Per prima cosa, all'interno del modello che si desidera utilizzare una gemma commentabile, aggiungere la seguente riga come suggerito nel README della gemma.
class Post < ActiveRecord::Base
acts_as_commentable
end
quindi creare un nuovo commento controller con l'azione create
. Si prega di notare che lo :authenticate_user!
fa parte del progetto che è un gioiello per la creazione di una facile autenticazione. current_user
è anche parte di idea come aiutante.È necessario se si desidera visualizzare il nome/l'e-mail dell'utente sotto il corpo del commento.
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
post = Post.find_by(id: params[:id])
comment = post.comments.build(comment_params)
comment.user = current_user
if comment.save
flash[:notice] = "Comment has been created."
redirect_to post
else
flash[:alert] = "Comment has not been created."
end
end
private
def comment_params
params.permit(:comment)
end
end
Successivamente, impostare i percorsi. È solo questo. Ciò significa che quando qualcuno invia una richiesta di post ai commenti, eseguiremo per creare un'azione all'interno del controller dei commenti.
post 'comments' => 'comments#create', as: "create_comment"
Il as: "create_comment"
dà un alias, in modo da poter fare create_comment_path
. Ora, nella visualizzazione dello spettacolo di Post, aggiungeremo il modulo. I div ti aiuteranno ad aggiungere css.
<div class="comment-section">
<%= form_tag create_comment_path, method: "post" do %>
<%= hidden_field_tag "id", @post.id %>
<%= text_area_tag :comment %>
<%= submit_tag "Submit" %>
<% end %>
</div>
Ora per mostrare ogni commento sotto lo show view post.
I div consentono di aggiungere css, comment.user.name
funzionerà se la classe utente ha una colonna del nome. Altrimenti, sostituirlo con email
o con qualsiasi altro identificativo che si sceglie di utilizzare.
<div class="comment_list">
<% @comments.each do |comment| %>
<%= comment.comment %> <br>
<%= comment.user.name %> <br>
<br>
<% end %>
</div>
E, infine, perché @comments di esistere nella pagina spettacolo, andare al controller Post, e sotto esposizione, aggiungere il seguente:
def show
@post = Post.find_by(id: params[:id])
@comments = @post.comments.all
end
Questo dovrebbe essere un bene per le esigenze . In bocca al lupo.
Questo http://www.arailsdemo.com/posts/16 potrebbe essere d'aiuto. – monocle