(Ruby on Rails)显示用户有多少个未经编辑的帖子

时间:2017-05-10 03:12:49

标签: ruby-on-rails

我在Ruby on Rails中制作一个博客类应用程序,每天自动生成帖子,然后用户编辑帖子以填写他们的日常信息(如日记)。

我正致力于制作管理信息中心,为管理员提供所有用户的概览。我有以下代码显示所有用户,并提供删除它们的选项。

_user.html.erb:

<li>
  <%= link_to user.name, user %>

  <% if current_user.admin? && !current_user?(user) %>
    | <%= link_to "delete", user, method: :delete,
                                  data: { confirm: "You sure?" } %>
  <% end %>
</li>

然后在我的主页上,我有以下代码,如果用户以管理员身份登录,将显示此列表:

<% if is_admin? %>

<h3>All Users</h3>
<ul class="users">
  <%= render @users %>
</ul>

当自动创建帖子时,会给出状态&#34; new&#34;编辑帖子后,将删除此状态。我想向管理员显示多少&#34; new&#34;用户在查看此概述时发布的帖子。

有没有人对如何做到这一点有任何建议?

2 个答案:

答案 0 :(得分:1)

为了显示每个用户状态为“新”的所有帖子的数量,您只需选择具有此状态的所有帖子并计算它们。选择取决于您用于存储状态的内容: 如果您使用的是AASM:

new_posts = user.posts.new #aasm gives you scopes for each state by default

如果您使用自定义二进制字段:

new_posts = user.posts.where(is_new: true) #select all user's posts where is_new field is true

如果您使用自定义字符串字段:

new_posts = user.posts.where(state: 'new') #select all user's posts where state field is 'new'

然后你必须计算这些帖子:

new_posts.count

答案 1 :(得分:1)

您可以在控制器中查询以下内容,因为您只需要了解每位用户的帖子概览/计数:

@users = User.joins(:posts).where('posts.status' => 'new').select('users.id, count(users.posts.id) as new_posts_count').group('users.id')

然后在你看来,

@users.each do |user|
  user.id #this will help you to link show page of the user with unedited posts
  user.new_posts_count #count of uedited posts for that user
end

对于用户未经编辑的帖子详细信息页面,您可以使用控制器。

def unedited_posts
  User.find(params[:id]).posts.unedited
end

并在范围的帖子模型中

unedited, -> {where(status: 'new')}