2010-05-20 58 views
0

我想知道是否爲我想要完成的最佳實踐...用戶重新創建這個循環?

首先,我們有模型類別,類別,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}。每做|類別|%>

最佳, 埃利奧特

回答

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 %> 
+0

嘿J, 感謝您的評論 - 在這樣做後,@categories爲每個用戶重複類別。即,如果用戶在商業中發佈兩次,並且在電影中發佈三次。 的@categories VAR專賣店: 業務 業務 電影 電影 電影 任何想法如何避免這種情況? – Elliot 2010-05-21 03:13:25

+0

您必須將'::uniq => true'添加到'has_many:through'。有關詳細信息,請參閱http://blog.hasmanythrough.com/2006/5/6/through-gets-uniq。 – kikito 2010-05-21 07:51:59

+0

@Elliot:就像egarcia說的那樣,有一個':uniq => true'缺少......現在它沒有重複的類別:] – 2010-05-21 11:47:30