用户重写这个循环?

时间:2010-05-20 23:49:50

标签: ruby-on-rails

我想知道这是否是我想要完成的最佳实践......

首先我们有模型类别,类别,has_many帖子。

现在让我们假设用户添加帖子。


现在,我有一个页面,我想按类别仅显示当前用户的帖子。


假设我们有以下类别:A,B和C

用户1已发布在类别A和B中。


在我看来,我有类似的东西:

<% @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 %>

在大多数情况下,它几乎就在那里。问题是,如果在其中输入任何帖子,它仍然会显示一个空类别(即使当前用户没有在该类别中输入帖子。

所以问题归结为:

如何使以下循环仅计算当前用户的类别中的帖子?

 0} .each do | category | %GT;

最佳, 埃利奥特

1 个答案:

答案 0 :(得分:1)

我会做类似的事情:

class User < ActiveRecord::Base
   has_many :posts
   has_many :categories, :through => :posts, :uniq => true
end

class Post < ActiveRecord::Base
   belongs_to :user
end

class Category < ActiveRecord::Base
   has_many :posts
end

# controller
@categories = current_user.categories

# view
<% @categories.each do |category| %> 
  <%= category.name %><br/> 
  <% category.posts.select {|post| post.user==current_user}.each do |post| %> 
    <%= post.content %><br/> 
  <% end %> 
<% end %>