我在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;用户在查看此概述时发布的帖子。
有没有人对如何做到这一点有任何建议?
答案 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')}