2012-08-09 98 views
4

好吧,開始學習rails,當然也是通過用個人博客(livejournal等)編寫服務開始的。我有職位腳手架和用戶模型(感謝設計)。現在我試圖通過某些用戶在/ url中顯示/ username/posts之類的所有帖子,但實際上無法理解如何製作這種rails方式。 早在路線在rails中顯示特定用戶的博客文章

resources :users do 
    resources :posts 
end 

作出嵌套資源和連接的用戶和後型號

has_many :posts 

belongs_to :user 

我應該爲用戶創建控制器或不?有沒有適當的方法呢?

P.S.感謝你的回答。試圖學習鐵軌,但幾乎所有我發現的教程都以腳手架結尾,這不是很有幫助。

編輯1:感謝「匹配」的想法,我解決了一半的問題。另一個(未解決)一半選擇由特定用戶寫入

編輯2帖子:添加

@user = User.where(:username => params[:username]) 
@posts = @user.posts 

到控制器,但是我有「未定義的方法`帖子」中的帖子控制器錯誤。

回答

3

當您使用where時,您將從查詢中獲取一個對象數組,而不是單個對象。
因此,您的@user變量上沒有posts方法。
也許你應該改變這樣的事情,只有一個user檢索:

@user = User.find_by_username(params[:username]) 

這樣,你只有一個user查詢,你可以使用.posts relashionship沒有錯誤。

+0

哇,謝謝!你真的救了我從另一天無用的搜索! – Nausik 2012-08-09 17:59:25

+0

總是樂於提供幫助。 – MurifoX 2012-08-09 18:03:26

1

當使用

resources :users do 
    resources :posts 
end 

你最終將不得不像URL '/用戶/ 1 /帖'

首先要在ID的情況下,你需要寫

def to_param 
    self.username 
end 
用戶名用戶模型中爲

或者,如果你不想讓你的網址是/用戶/:ID /職位,你可以使用匹配

match ':username/posts' ,'posts#show' 

,將帶你到崗位控制器和顯示操作創建一個路由的URL。

+1

關於控制器,你應該在PostsController中做一個before_filter,以便從用戶名獲得用戶名,以便在每個動作中都可以訪問它,所以它是Dryer然後在每個動作中都這樣做的 – 2012-08-09 17:37:26

+0

謝謝你的回答! 「匹配」的想法真的幫助了我,但我真的無法理解如何選擇僅來自某個用戶的帖子 – Nausik 2012-08-09 17:37:32