【问题标题】:how to make a post require a manual approval by admin before getting displayed?如何使帖子在显示之前需要管理员手动批准?
【发布时间】:2013-04-05 14:16:19
【问题描述】:

我是一名新的 Rails 开发人员,我有一个 Rails 应用程序,我允许用户在其中发布帖子,同时允许他们选择选中复选框。我希望能够手动查看用户在发布过程中检查的所有帖子。现在,所有内容都已成功发布,但我希望对所有选中的帖子都进行此审核。进行此审核的最简单和最简单的方法是什么?

这就是 post 控制器现在的样子

def create
    @post = current_user.posts.build(params[:post])
    if @post.save
      flash[:success] = "Shared!"
      redirect_to root_path
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

【问题讨论】:

  • 只是为了澄清一下,如果用户选中复选框,则帖子需要审核,但在审核并接受之前不可见?如果未选中复选框,则帖子根本不共享?
  • @Zaid,是的,这正是我想要做的

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

为此,您最好将“已审核”字段的数据类型保留为“布尔”(在迁移文件中)。

要在您的视图中放置复选框,请检查: http://guides.rubyonrails.org/form_helpers.html#helpers-for-generating-form-elements

另外,请注意,如果您想验证是否存在布尔字段(其中真实值为真和假),则不能使用:

validate :field_name, :presence => true 

这是由于 Object#blank 的方式?处理布尔值。假的空白? # => 真 在这种情况下,您可以使用:

validates :field_name, :allow_nil => true, :inclusion => {:in => [true, false]}

如果您将 false 作为默认值分配给新创建的帖子(并且您需要在触发验证之前执行此操作),则可以从上述验证语句中省略 ":allow_nil => true"。

【讨论】:

    【解决方案2】:

    我不是从 RoR 的角度谈论,而是在一般实施中

    在数据库中,添加一个名为“已审核”的字段。它包含一个“Y”或“N”。默认应为“Y”。

    现在,在保存或更新帖子时,将复选框标记为 Y 或 N 到此字段中,然后 在模型中,仅查询 'Reviewed' = 'Y' 的帖子。

    这样,如果用户不勾选,默认值为'Y',帖子就会显示出来,但如果用户勾选,则默认值为'N',你开发一个review界面(我希望您已经这样做了)在审核后,您将其标记为“Y”。

    这很简单。如果您需要添加更多关于谁审核、何时审核等信息,您可以添加更多数据库字段来存储。

    更新

    我从事 ColdFusion 技术的工作,我们拥有受 RoR 启发的 CFWheels 框架。
    根据经验,我建议您使用表单助手。

    试试这个代码

    <%= check_box_tag(:post_reviewed) %>
    <%= label_tag(:post_reviewed, "Review this post") %>
    

    更多详情,请阅读check box tag in ruby on railscheck box form helper

    【讨论】:

    • 我觉得我快到了。但是,您知道我如何做到这一点,以便如果用户选中该框,它会使帖子审核 =“N”并且它不显示? (建立这种关联的代码)
    • 将选中的值设置为 1,未选中的设置为 0。现在,在发布表单值时检查它们。如果它被选中,则保存到您的数据库中'N'否则不做任何事情。默认的“Y”已经存在,就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多