我想知道这是否是我想要完成的最佳实践......
首先我们有模型类别,类别,has_many帖子。
现在让我们假设用户添加帖子。
现在,我有一个页面,我想按类别仅显示当前用户的帖子。
假设我们有以下类别:A,B和C
用户1已发布在类别A和B中。
在我看来,我有类似的东西:
@categories.each do |category|
category.name
@posts.each do |post|
if post.category_id==category.id
post content here
end
end
end
问题在于,我将展示空类别以及具有内容的类别。
有没有更有效的方法来解决这个问题?因为我不想显示空的类别。
最佳, 埃利奥特
更新:
所以我一直在尝试使用这段代码:
0} .each do | category | %GT;在大多数情况下,它几乎就在那里。问题是,如果在其中输入任何帖子,它仍然会显示一个空类别(即使当前用户没有在该类别中输入帖子。
所以问题归结为:
如何使以下循环仅计算当前用户的类别中的帖子?
0} .each do | category | %GT;答案 0 :(得分:2)
<% @categories.select {|cat| cat.posts.count > 0}.each do |category| %>
<%= category.name %><br/>
<% category.posts.select {|post| post.user == current_user}.each do |post| %>
<%= post.content %><br/>
<% end %>
<% end %>
这会为每个类别呈现任何帖子,然后呈现属于当前用户的类别中每个帖子的内容。您可能希望在控制器中进行初始选择,以保持视图清洁。
答案 1 :(得分:1)
添加到zetetic的答案,也许以相反的方式查找给定类别中用户的帖子。而不是查询“作者是当前用户的类别的所有帖子”,而是要求“用户在给定类别中的所有帖子”
<% @categories.select {|cat| cat.posts.count > 0}.each do |category| %>
<%= category.name %><br/>
<% current_user.posts_in_category(category).each do |post| %>
<%= post.content %><br/>
<% end %>
<% end %>
并抛出范围搜索User#posts_in_category
编辑:如果您没有在视图中的其他位置显示@categories变量,也可以设置已从控制器中过滤的@categories变量。此外,如果类别没有帖子,则不会进入周期,因此可能不需要选择。
答案 2 :(得分:0)
@categories.select do |category|
category.posts.any? {|post| post.user == current_user }
end
将过滤掉类别,使其只包含current_user的帖子类别。我想在数据库中执行此操作会更有效,如果您正在获取@categories,请使用此选项。
答案 3 :(得分:0)
根据我的关注,您需要为发布给定类别的帖子的用户提供一个中间表,该表可能包含以下字段
user_id,post_id,category_id通过这种方式,您将拥有一个具有类别ID的表,并且每个类别都有一个帖子。
然后你可以做以下
获取不同的类别(从上表) 循环通过类别 获取这些类别的帖子
**那么你不会在没有帖子的情况下得到任何类别
欢呼声, sameera