2016-06-21 2 views
1

Я создаю блог с булавками и комментариями. Мне интересно, как создать систему, посредством которой администратор может одобрять комментарии к блогам, прежде чем пользователи смогут их просматривать.Ruby on Rails - одобрение комментариев администратора в блоге

Сначала я попытался добавить логическое поле, называемого pinreview моих комментариев модели:

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 

Я определил типы пользователей через перечисления:

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 

И в моем Я пробовал такие вещи:

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

запиннингованном почтовые шоу, но не комментарии пользователей, а также при входе в систему как администратор, нет места, чтобы утвердить комментарии шоу. Как мне создать представление для администраторов для одобрения комментариев, а затем получить комментарии, представленные в гостевом представлении пользователя при его одобрении?

Кроме того, я должен отметить, что комментарии могут быть сделаны анонимными пользователями - пользователь не должен быть подписан до или вошли в

Оценил никаких указаний по этому вопросу.. При необходимости я могу предоставить больше кода. Благодарю.

+1

Почему пользователи должны булавки? Что вместо этого используется не только approved_timestamp? Если кто-то докажет, вы узнаете, есть ли это и когда он был одобрен. Если вам действительно нужно знать, кто их одобрил, вы можете пойти с 2 поля approved_timestamp, approved_by_id (или что-то подобное) – lcguida

+0

Как указано в lcguida, это хорошая форма для использования временной метки вместо логического. Это то, что я узнал много лет назад. –

ответ

1

Простейший способ сделать это так:

(current_user.try(admin?) ? @pin.comments : @pin.comments.approved).each do |comment| 
Смежные вопросы