Ruby on Rails - 在管理员对其进行评审之前,如何发布帖子?

时间:2013-04-17 02:02:45

标签: ruby-on-rails

我正在开发我的第一个应用程序,类似于用户可以发帖的Pinterest。现在,所有发布的帖子都会立即发布。如何构建管理员批准流程,以便在管理员批准每个帖子之前不发布帖子?

所以我在“Pins”下创建了一个名为“pinreview”的布尔值,每个帖子最初都是空白的。如何编辑控制器,以便索引和显示视图中的公众可见的引脚以及索引视图的分页只会考虑已批准的“引脚”?如果可以这样做,我如何建立一个管理页面,允许管理员查看非公开的帖子提交并勾选“pinreview”复选框?

我已在下面附上我的代码。谢谢!

schema.rb

create_table "pins", :force => true do |t|
    ...
    t.boolean  "pinreview"
end

pins_controller.rb

def index
  @pins = Pin.order("created_at desc").page(params[:page]).per_page(5)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @pins }
  end
end

def show
  @pin = Pins.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @pin }
  end
end

index.html.erb

<%= render @pins %>
<%= will_paginate @pins %>

_pins.html.erb

<%= pin.name %>
<%= pin.description %>

2 个答案:

答案 0 :(得分:6)

scopes添加到您的Pin型号:

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

我将建议另一个范围来帮助清理你的控制器:

scope :newest, order("created_at desc")

然后,您可以查询这些范围:

@pins = Pin.approved.newest.page(params[:page]).per_page(5)

要获得未经批准的Pins,只需更改范围:

@pins = Pin.pending.newest.page(params[:page]).per_page(5)

答案 1 :(得分:1)

我发现有用的是在控制器中集成“before_action”方法,如果您通常不想显示当前正在审核的任何引脚。

before_action :is_approved, only: :index

def is_approved
    @pins = Pin.all.where(:pinreview => false)
end

希望这可以帮助寻找不显示任何内容的整体解决方案的人,例如索引