2013-10-13 22 views
1

我有一個用戶發佈相冊評論的rails應用程序。所發佈的評論被稱爲「針」,並且與發佈日期,專輯標題,藝術家姓名,專輯封面圖像和年份排名一起上傳。 (如我在本年度最受歡迎的1張專輯中)引腳屬於用戶,用戶有很多引腳。我想要做的是爲2013年創建一個顯示每個用戶的新頁面,然後列出專輯圖像,標題,藝術家降序排列的列表作爲其年度前十名單。類似於:在Rails中顯示用戶帖子的列表

<% @users.each do |user| %> 
<%= link_to (image_tag user.image(:small)), user %> <%= user.name %> 
<ol> 
    <li><%= @pin.album %> - <% @pin.artist%></li>  
    </ol> 
<% end %> 

我需要將引腳限制爲僅:date =>「2013」​​,我需要按降序列出它們。

我無法搞清楚控制器和視圖。這是我的頁面控制器至今:

def tens2013 
    @users = User.all 
    @pin = Pin.where(:date => "2013") 
end 

我應該如何設置我的控制器能夠調用<%= @ pin.user.album%>?

回答

1

我看到它的方式,你的模型應該成立像這樣:

class User < ActiveRecord::Base 
    has_many :pins 
end 

class Pin < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :album 
end 

class Album < ActiveRecord::Base 
    has_many :pins 
end 

Pin應該有user_idalbum_id到請點擊此處。

然後在控制器,你可以貪婪加載所有的用戶和他們的腳,每個腳各自的專輯,像這樣:

@users = User.includes(:pins => :album) 

或限制在一定的一年,這樣做:

@users = User.includes(:pins => :album).where('pins.date>=?','2013-01-01').references(:pins) 

現在,您可以遍歷視圖中的用戶以及每個用戶的針腳和每個針的相冊。

對於每個用戶的引腳,您不需要使用@pin。在您的視圖中進行必要的更改,並使用此樣式遍歷它們:

@users.each do |user| 
    # do something 
    user.pins.each do |pin| 
    # Now you have "pin" and you can use it: 
    # pin.album... 
    # pin.artist... 
    end 
end 
+0

非常感謝你爲此付出了努力。有一個引腳模型和一個用戶模型。相冊只是pin的一個屬性。我想你上面描述的方式,專輯正在被視爲自己的模式。正確? –

+0

正確。也許那是因爲我不瞭解你的模型?如果我找到你的話,專輯看起來更像是一個自己的實體,並且專注於一種專輯的審查,不是嗎? – mjnissim

+0

對不起,這個pin是整個帖子的暱稱。用戶添加具有以下屬性的「pin」:圖像(專輯藝術),專輯(標題),藝術家(藝術家的姓名),日期(發行年份),排名(年份最喜歡的排名,如#1)可以列出用戶及其屬性,以及它們具有多少個引腳,但是我還想列出這些引腳的屬性。我沒有能力聊天,否則我會。它會使這更容易。 –

1
  1. 要調用@pin.user.album,您需要首先在模型級定義依賴關係。因此,在Pin型號中,您應該有belongs_to :users,而在User型號中,您應該包含has_many :pins。現在這將假設在Pin模型中,有一個名爲user_id的字段,它將是外鍵。當你要訪問這樣的依賴類時,在查詢中也使用:include。它避免了N + 1查詢問題。例如:

    @pin = Pin.includes(:users).where("date >= ?","2013-01-01") 
    
  2. 要限制爲僅2013年響應,您可能需要同樣搜索查詢:

    @pin = Pin.where("date >= ?","2013-01-01") 
    
+0

感謝您的回覆。是的,我有別針belongs_to:用戶和用戶has_many:別針。 Pin有user_id。我的網站對我目前使用它的工作非常有效。我在創建2013頁面時遇到了麻煩。使用你的建議上面,當我打電話@ pin.user.album我得到未定義的方法'用戶'爲#

+0

這是當前的網站,如果它有幫助:http:// thetens。我們 –

+0

將belongs_to:用戶更改爲belongs_to:user(用sigular)。這應該工作。 – mjnissim

相關問題