【问题标题】:Ruby on Rails – admin comment approval on a blogRuby on Rails – 博客上的管理员评论批准
【发布时间】:2016-06-21 11:11:08
【问题描述】:

我正在创建一个包含 pin 和 cmets 的博客。我想知道如何创建一个系统,让管理员可以在用户查看之前批准博客上的 cmets。

首先我尝试在我的 cmets 模型中添加一个名为 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) 
...

置顶帖子显示,但不显示用户 cmets,并且当以管理员身份登录时,没有空间来批准 cmets 显示。如何为管理员创建视图以批准 cmets,然后在获得批准后在来宾用户视图中呈现 cmets?

另外,我应该提到 cmets 可以由匿名用户创建 - 用户不必注册或登录。

不胜感激任何有关这方面的指导。如果需要,我可以提供更多代码。谢谢。

【问题讨论】:

  • 为什么用户需要密码?什么不仅使用approved_timestamp 代替?如果有人证明了,你就会知道它是否存在以及何时获得批准。如果您确实需要知道谁批准了,您可以使用 2 个字段approved_timestamp、approved_by_id(或类似的)
  • 正如 lcguida 所说,使用时间戳而不是布尔值是一种很好的形式。这是我多年前学到的东西。

标签: ruby-on-rails ruby authorization blogs


【解决方案1】:

最简单的方法是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多