2016-06-21 18 views
1

Ich erstelle einen Blog, der Pins und Kommentare hat. Ich frage mich, wie man ein System erstellen kann, mit dem der Administrator Kommentare in Blogs genehmigen kann, bevor Benutzer sie anzeigen können.Ruby on Rails - Admin Kommentar Genehmigung auf einem Blog

Zuerst habe ich versucht, einen Booleschen Feld hinzufügen pinreview auf meine Kommentare Modell genannt:

comment.rb
class Comment < ActiveRecord::Base 
    belongs_to :pin 

    scope :approved, ->{ 
    where(:pinreview => false) 
    } 
    scope :pending, -> { 
    where(:pinreview => true) 
    } 

    scope :newest, -> { 
    order("created_at desc") 
    } 
end 
class CommentsController < ApplicationController 
    def create 
    @pin = Pin.find(params[:pin_id]) 
    @comment = @pin.comments.create(params[:comment].permit(:name, :body)) 

    redirect_to pin_path(@pin) 
    end 

    def destroy 
    @pin = Pin.find(params[:pin_id]) 
    @comment = @pin.comments.find(params[:id]) 
    @comment.destroy 

    redirect_to pin_path(@pin) 
    end 
end 

ich die Benutzertypen durch Aufzählungen definiert haben:

class User < ActiveRecord::Base 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    enum access_level: [:guest, :admin] 
    has_many :pins 

    def admin 
    admin? 
    end 

    def guest 
    guest? 
    end 

end 

Und in meinem Ich habe versucht, Dinge wie folgt:

pins/show.html.erb
... 
    - if current_user && current_user.admin? ? @pin.comments = Comment.all : @pin.comments = Comment.where(:approved => false) 
... 

Die gepinnten Post zeigt, nicht aber die Benutzer Kommentare, und wenn als Admin angemeldet, um keinen Raum Kommentare zeigt genehmigen. Wie würde ich die Ansicht für Administratoren erstellen, um Kommentare zu genehmigen und die Kommentare dann in der Gastbenutzeransicht gerendert zu lassen, wenn sie genehmigt wurden?

Auch sollte ich erwähnen, dass Kommentare können von anonymen Benutzern gemacht werden - ein Benutzer nicht angemeldet oder angemeldet sein

auf diese jede Führung zu schätzen wissen.. Ich kann bei Bedarf mehr Code bereitstellen. Vielen Dank.

+1

Warum benötigen Benutzer Stifte? Was nutzt nicht nur ein approved_timestamp? Wenn jemand bewiesen hat, werden Sie wissen, ob es ist und wann es genehmigt wurde. Wenn Sie wirklich wissen müssen, wer genehmigt hat, können Sie mit zwei Feldern gehen: approved_timestamp, approved_by_id (oder etwas Ähnliches) – lcguida

+0

Wie von lcguida angegeben, ist es eine gute Form, einen Zeitstempel anstelle eines booleschen zu verwenden. Das habe ich vor vielen Jahren gelernt. –

Antwort

1

einfachste Weg, dies zu tun ist, wie folgt aus:

(current_user.try(admin?) ? @pin.comments : @pin.comments.approved).each do |comment|