【发布时间】: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